svn: r979
This commit is contained in:
Matthew Flatt 2005-10-04 21:02:37 +00:00
parent 54ea8d32a8
commit 261662f378
47 changed files with 5712 additions and 8876 deletions

View File

@ -22,7 +22,7 @@ PERL = @PERL@
RANLIB = @RANLIB@ RANLIB = @RANLIB@
AR = @AR@ AR = @AR@
ARFLAGS = @ARFLAGS@ ARFLAGS = @ARFLAGS@
OPTIONS = @OPTIONS@ @MROPTIONS@ OPTIONS = @OPTIONS@ @GC2OPTIONS@ @MROPTIONS@
XINCLUDE = @X_CFLAGS@ XINCLUDE = @X_CFLAGS@
XLIB = @X_LIBS@ XLIB = @X_LIBS@
LDLIBS = @X_PRE_LIBS@ -lXaw -lXmu -lXt -lX11 -lXext @X_EXTRA_LIBS@ @LIBS@ LDLIBS = @X_PRE_LIBS@ -lXaw -lXmu -lXt -lX11 -lXext @X_EXTRA_LIBS@ @LIBS@
@ -60,8 +60,8 @@ MZMMM = $(MZMMM_@WXVARIANT@)
XFORM_CMD = $(MZMMM) -rq $(srcdir)/../../mzscheme/gc2/xform.ss --setup XFORM_CMD = $(MZMMM) -rq $(srcdir)/../../mzscheme/gc2/xform.ss --setup
XFORM_CPP_ARGS = -I$(srcdir)/../../mzscheme/gc2 $(XINCLUDE) $(NOGCINC) $(OPTIONS) @PREFLAGS@ $(XFORM_INC_@WXVARIANT@) @JPEG_INC@ @ZLIB_INC@ XFORM_CPP_ARGS = -I$(srcdir)/../../mzscheme/gc2 $(XINCLUDE) $(NOGCINC) $(OPTIONS) @PREFLAGS@ $(XFORM_INC_@WXVARIANT@) @JPEG_INC@ @ZLIB_INC@
XFORMXX = $(XFORM_CMD) "$(CXXCPP) $(XFORM_CPP_ARGS)" XFORMXX = $(XFORM_CMD) --cpp "$(CXXCPP) $(XFORM_CPP_ARGS)" -o
XFORM = $(XFORM_CMD) "$(CPP) $(XFORM_CPP_ARGS)" XFORM = $(XFORM_CMD) --cpp "$(CPP) $(XFORM_CPP_ARGS)" -o
XFORMDEP = $(srcdir)/../../mzscheme/gc2/xform.ss $(srcdir)/../../mzscheme/gc2/xform-mod.ss $(srcdir)/../../mzscheme/gc2/gc2.h XFORMDEP = $(srcdir)/../../mzscheme/gc2/xform.ss $(srcdir)/../../mzscheme/gc2/xform-mod.ss $(srcdir)/../../mzscheme/gc2/gc2.h
WXBDIR=../../wxxt WXBDIR=../../wxxt
@ -70,141 +70,141 @@ WXMACBDIR=../../wxmac/src
MREDLDFLAGS = -L$(WXBDIR)/utils/image/src -L$(WXBDIR)/contrib/xpm/lib $(LDFLAGS) -L../../mzscheme -L../wxs -L../wxme -L$(WXBDIR)/src MREDLDFLAGS = -L$(WXBDIR)/utils/image/src -L$(WXBDIR)/contrib/xpm/lib $(LDFLAGS) -L../../mzscheme -L../wxs -L../wxme -L$(WXBDIR)/src
xsrc/Window.cc: $(WXDIR)/src/Windows/Window.cc $(WXBDIR)/src/Windows/Window.@LTO@ $(XFORMDEP) xsrc/Window.cc: $(WXDIR)/src/Windows/Window.cc $(WXBDIR)/src/Windows/Window.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/src/Windows/Window.cc xsrc/Window.cc $(XFORM) xsrc/Window.cc $(WXDIR)/src/Windows/Window.cc
xsrc/Button.cc: $(WXDIR)/src/Windows/Button.cc $(WXBDIR)/src/Windows/Button.@LTO@ $(XFORMDEP) xsrc/Button.cc: $(WXDIR)/src/Windows/Button.cc $(WXBDIR)/src/Windows/Button.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/src/Windows/Button.cc xsrc/Button.cc $(XFORM) xsrc/Button.cc $(WXDIR)/src/Windows/Button.cc
xsrc/Frame.cc: $(WXDIR)/src/Windows/Frame.cc $(WXBDIR)/src/Windows/Frame.@LTO@ $(XFORMDEP) xsrc/Frame.cc: $(WXDIR)/src/Windows/Frame.cc $(WXBDIR)/src/Windows/Frame.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/src/Windows/Frame.cc xsrc/Frame.cc $(XFORM) xsrc/Frame.cc $(WXDIR)/src/Windows/Frame.cc
xsrc/Layout.cc: $(WXDIR)/src/Windows/Layout.cc $(WXBDIR)/src/Windows/Layout.@LTO@ $(XFORMDEP) xsrc/Layout.cc: $(WXDIR)/src/Windows/Layout.cc $(WXBDIR)/src/Windows/Layout.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/src/Windows/Layout.cc xsrc/Layout.cc $(XFORM) xsrc/Layout.cc $(WXDIR)/src/Windows/Layout.cc
xsrc/MenuBar.cc: $(WXDIR)/src/Windows/MenuBar.cc $(WXBDIR)/src/Windows/MenuBar.@LTO@ $(XFORMDEP) xsrc/MenuBar.cc: $(WXDIR)/src/Windows/MenuBar.cc $(WXBDIR)/src/Windows/MenuBar.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/src/Windows/MenuBar.cc xsrc/MenuBar.cc $(XFORM) xsrc/MenuBar.cc $(WXDIR)/src/Windows/MenuBar.cc
xsrc/RadioBox.cc: $(WXDIR)/src/Windows/RadioBox.cc $(WXBDIR)/src/Windows/RadioBox.@LTO@ $(XFORMDEP) xsrc/RadioBox.cc: $(WXDIR)/src/Windows/RadioBox.cc $(WXBDIR)/src/Windows/RadioBox.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/src/Windows/RadioBox.cc xsrc/RadioBox.cc $(XFORM) xsrc/RadioBox.cc $(WXDIR)/src/Windows/RadioBox.cc
xsrc/CheckBox.cc: $(WXDIR)/src/Windows/CheckBox.cc $(WXBDIR)/src/Windows/CheckBox.@LTO@ $(XFORMDEP) xsrc/CheckBox.cc: $(WXDIR)/src/Windows/CheckBox.cc $(WXBDIR)/src/Windows/CheckBox.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/src/Windows/CheckBox.cc xsrc/CheckBox.cc $(XFORM) xsrc/CheckBox.cc $(WXDIR)/src/Windows/CheckBox.cc
xsrc/Choice.cc: $(WXDIR)/src/Windows/Choice.cc $(WXBDIR)/src/Windows/Choice.@LTO@ $(XFORMDEP) xsrc/Choice.cc: $(WXDIR)/src/Windows/Choice.cc $(WXBDIR)/src/Windows/Choice.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/src/Windows/Choice.cc xsrc/Choice.cc $(XFORM) xsrc/Choice.cc $(WXDIR)/src/Windows/Choice.cc
xsrc/Gauge.cc: $(WXDIR)/src/Windows/Gauge.cc $(WXBDIR)/src/Windows/Gauge.@LTO@ $(XFORMDEP) xsrc/Gauge.cc: $(WXDIR)/src/Windows/Gauge.cc $(WXBDIR)/src/Windows/Gauge.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/src/Windows/Gauge.cc xsrc/Gauge.cc $(XFORM) xsrc/Gauge.cc $(WXDIR)/src/Windows/Gauge.cc
xsrc/ListBox.cc: $(WXDIR)/src/Windows/ListBox.cc $(WXBDIR)/src/Windows/ListBox.@LTO@ $(XFORMDEP) xsrc/ListBox.cc: $(WXDIR)/src/Windows/ListBox.cc $(WXBDIR)/src/Windows/ListBox.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/src/Windows/ListBox.cc xsrc/ListBox.cc $(XFORM) xsrc/ListBox.cc $(WXDIR)/src/Windows/ListBox.cc
xsrc/Message.cc: $(WXDIR)/src/Windows/Message.cc $(WXBDIR)/src/Windows/Message.@LTO@ $(XFORMDEP) xsrc/Message.cc: $(WXDIR)/src/Windows/Message.cc $(WXBDIR)/src/Windows/Message.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/src/Windows/Message.cc xsrc/Message.cc $(XFORM) xsrc/Message.cc $(WXDIR)/src/Windows/Message.cc
xsrc/Slider.cc: $(WXDIR)/src/Windows/Slider.cc $(WXBDIR)/src/Windows/Slider.@LTO@ $(XFORMDEP) xsrc/Slider.cc: $(WXDIR)/src/Windows/Slider.cc $(WXBDIR)/src/Windows/Slider.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/src/Windows/Slider.cc xsrc/Slider.cc $(XFORM) xsrc/Slider.cc $(WXDIR)/src/Windows/Slider.cc
xsrc/Canvas.cc: $(WXDIR)/src/Windows/Canvas.cc $(WXBDIR)/src/Windows/Canvas.@LTO@ $(XFORMDEP) xsrc/Canvas.cc: $(WXDIR)/src/Windows/Canvas.cc $(WXBDIR)/src/Windows/Canvas.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/src/Windows/Canvas.cc xsrc/Canvas.cc $(XFORM) xsrc/Canvas.cc $(WXDIR)/src/Windows/Canvas.cc
xsrc/DialogBox.cc: $(WXDIR)/src/Windows/DialogBox.cc $(WXBDIR)/src/Windows/DialogBox.@LTO@ $(XFORMDEP) xsrc/DialogBox.cc: $(WXDIR)/src/Windows/DialogBox.cc $(WXBDIR)/src/Windows/DialogBox.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/src/Windows/DialogBox.cc xsrc/DialogBox.cc $(XFORM) xsrc/DialogBox.cc $(WXDIR)/src/Windows/DialogBox.cc
xsrc/Item.cc: $(WXDIR)/src/Windows/Item.cc $(WXBDIR)/src/Windows/Item.@LTO@ $(XFORMDEP) xsrc/Item.cc: $(WXDIR)/src/Windows/Item.cc $(WXBDIR)/src/Windows/Item.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/src/Windows/Item.cc xsrc/Item.cc $(XFORM) xsrc/Item.cc $(WXDIR)/src/Windows/Item.cc
xsrc/Menu.cc: $(WXDIR)/src/Windows/Menu.cc $(WXBDIR)/src/Windows/Menu.@LTO@ $(XFORMDEP) xsrc/Menu.cc: $(WXDIR)/src/Windows/Menu.cc $(WXBDIR)/src/Windows/Menu.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/src/Windows/Menu.cc xsrc/Menu.cc $(XFORM) xsrc/Menu.cc $(WXDIR)/src/Windows/Menu.cc
xsrc/Panel.cc: $(WXDIR)/src/Windows/Panel.cc $(WXBDIR)/src/Windows/Panel.@LTO@ $(XFORMDEP) xsrc/Panel.cc: $(WXDIR)/src/Windows/Panel.cc $(WXBDIR)/src/Windows/Panel.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/src/Windows/Panel.cc xsrc/Panel.cc $(XFORM) xsrc/Panel.cc $(WXDIR)/src/Windows/Panel.cc
xsrc/DC.cc: $(WXDIR)/src/DeviceContexts/DC.cc $(WXBDIR)/src/DeviceContexts/DC.@LTO@ $(XFORMDEP) xsrc/DC.cc: $(WXDIR)/src/DeviceContexts/DC.cc $(WXBDIR)/src/DeviceContexts/DC.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/src/DeviceContexts/DC.cc xsrc/DC.cc $(XFORM) xsrc/DC.cc $(WXDIR)/src/DeviceContexts/DC.cc
xsrc/WindowDC.cc: $(WXDIR)/src/DeviceContexts/WindowDC.cc $(WXBDIR)/src/DeviceContexts/WindowDC.@LTO@ $(XFORMDEP) xsrc/WindowDC.cc: $(WXDIR)/src/DeviceContexts/WindowDC.cc $(WXBDIR)/src/DeviceContexts/WindowDC.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/src/DeviceContexts/WindowDC.cc xsrc/WindowDC.cc $(XFORM) xsrc/WindowDC.cc $(WXDIR)/src/DeviceContexts/WindowDC.cc
xsrc/MemoryDC.cc: $(WXDIR)/src/DeviceContexts/MemoryDC.cc $(WXBDIR)/src/DeviceContexts/MemoryDC.@LTO@ $(XFORMDEP) xsrc/MemoryDC.cc: $(WXDIR)/src/DeviceContexts/MemoryDC.cc $(WXBDIR)/src/DeviceContexts/MemoryDC.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/src/DeviceContexts/MemoryDC.cc xsrc/MemoryDC.cc $(XFORM) xsrc/MemoryDC.cc $(WXDIR)/src/DeviceContexts/MemoryDC.cc
xsrc/PSDC.cc: $(WXDIR)/src/DeviceContexts/PSDC.cc $(WXBDIR)/src/DeviceContexts/PSDC.@LTO@ $(XFORMDEP) xsrc/PSDC.cc: $(WXDIR)/src/DeviceContexts/PSDC.cc $(WXBDIR)/src/DeviceContexts/PSDC.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/src/DeviceContexts/PSDC.cc xsrc/PSDC.cc $(XFORM) xsrc/PSDC.cc $(WXDIR)/src/DeviceContexts/PSDC.cc
xsrc/Object.cc: $(WXDIR)/src/DataStructures/Object.cc $(WXBDIR)/src/DataStructures/Object.@LTO@ $(XFORMDEP) xsrc/Object.cc: $(WXDIR)/src/DataStructures/Object.cc $(WXBDIR)/src/DataStructures/Object.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/src/DataStructures/Object.cc xsrc/Object.cc $(XFORM) xsrc/Object.cc $(WXDIR)/src/DataStructures/Object.cc
xsrc/TypeTree.cc: $(WXDIR)/src/DataStructures/TypeTree.cc $(WXBDIR)/src/DataStructures/TypeTree.@LTO@ $(XFORMDEP) xsrc/TypeTree.cc: $(WXDIR)/src/DataStructures/TypeTree.cc $(WXBDIR)/src/DataStructures/TypeTree.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/src/DataStructures/TypeTree.cc xsrc/TypeTree.cc $(XFORM) xsrc/TypeTree.cc $(WXDIR)/src/DataStructures/TypeTree.cc
xsrc/wb_list.cc: $(WXDIR)/src/DataStructures/wb_list.cc $(WXBDIR)/src/DataStructures/wb_list.@LTO@ $(XFORMDEP) xsrc/wb_list.cc: $(WXDIR)/src/DataStructures/wb_list.cc $(WXBDIR)/src/DataStructures/wb_list.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/src/DataStructures/wb_list.cc xsrc/wb_list.cc $(XFORM) xsrc/wb_list.cc $(WXDIR)/src/DataStructures/wb_list.cc
xsrc/wb_hash.cc: $(WXDIR)/src/DataStructures/wb_hash.cc $(WXBDIR)/src/DataStructures/wb_hash.@LTO@ $(XFORMDEP) xsrc/wb_hash.cc: $(WXDIR)/src/DataStructures/wb_hash.cc $(WXBDIR)/src/DataStructures/wb_hash.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/src/DataStructures/wb_hash.cc xsrc/wb_hash.cc $(XFORM) xsrc/wb_hash.cc $(WXDIR)/src/DataStructures/wb_hash.cc
xsrc/AppMain.cc: $(WXDIR)/src/Application/AppMain.cc $(WXBDIR)/src/Application/AppMain.@LTO@ $(XFORMDEP) xsrc/AppMain.cc: $(WXDIR)/src/Application/AppMain.cc $(WXBDIR)/src/Application/AppMain.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/src/Application/AppMain.cc xsrc/AppMain.cc $(XFORM) xsrc/AppMain.cc $(WXDIR)/src/Application/AppMain.cc
xsrc/GlobalData.cc: $(WXDIR)/src/Application/GlobalData.cc $(WXBDIR)/src/Application/GlobalData.@LTO@ $(XFORMDEP) xsrc/GlobalData.cc: $(WXDIR)/src/Application/GlobalData.cc $(WXBDIR)/src/Application/GlobalData.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/src/Application/GlobalData.cc xsrc/GlobalData.cc $(XFORM) xsrc/GlobalData.cc $(WXDIR)/src/Application/GlobalData.cc
xsrc/FileDialog.cc: $(WXDIR)/src/Dialogs/FileDialog.cc $(WXBDIR)/src/Dialogs/FileDialog.@LTO@ $(XFORMDEP) xsrc/FileDialog.cc: $(WXDIR)/src/Dialogs/FileDialog.cc $(WXBDIR)/src/Dialogs/FileDialog.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/src/Dialogs/FileDialog.cc xsrc/FileDialog.cc $(XFORM) xsrc/FileDialog.cc $(WXDIR)/src/Dialogs/FileDialog.cc
xsrc/MessageBox.cc: $(WXDIR)/src/Dialogs/MessageBox.cc $(WXBDIR)/src/Dialogs/MessageBox.@LTO@ $(XFORMDEP) xsrc/MessageBox.cc: $(WXDIR)/src/Dialogs/MessageBox.cc $(WXBDIR)/src/Dialogs/MessageBox.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/src/Dialogs/MessageBox.cc xsrc/MessageBox.cc $(XFORM) xsrc/MessageBox.cc $(WXDIR)/src/Dialogs/MessageBox.cc
xsrc/EvtHandler.cc: $(WXDIR)/src/EventHandling/EvtHandler.cc $(WXBDIR)/src/EventHandling/EvtHandler.@LTO@ $(XFORMDEP) xsrc/EvtHandler.cc: $(WXDIR)/src/EventHandling/EvtHandler.cc $(WXBDIR)/src/EventHandling/EvtHandler.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/src/EventHandling/EvtHandler.cc xsrc/EvtHandler.cc $(XFORM) xsrc/EvtHandler.cc $(WXDIR)/src/EventHandling/EvtHandler.cc
xsrc/wb_sysev.cc: $(WXDIR)/src/EventHandling/wb_sysev.cc $(WXBDIR)/src/EventHandling/wb_sysev.@LTO@ $(XFORMDEP) xsrc/wb_sysev.cc: $(WXDIR)/src/EventHandling/wb_sysev.cc $(WXBDIR)/src/EventHandling/wb_sysev.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/src/EventHandling/wb_sysev.cc xsrc/wb_sysev.cc $(XFORM) xsrc/wb_sysev.cc $(WXDIR)/src/EventHandling/wb_sysev.cc
xsrc/wb_stdev.cc: $(WXDIR)/src/EventHandling/wb_stdev.cc $(WXBDIR)/src/EventHandling/wb_stdev.@LTO@ $(XFORMDEP) xsrc/wb_stdev.cc: $(WXDIR)/src/EventHandling/wb_stdev.cc $(WXBDIR)/src/EventHandling/wb_stdev.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/src/EventHandling/wb_stdev.cc xsrc/wb_stdev.cc $(XFORM) xsrc/wb_stdev.cc $(WXDIR)/src/EventHandling/wb_stdev.cc
xsrc/Bitmap.cc: $(WXDIR)/src/GDI-Classes/Bitmap.cc $(WXBDIR)/src/GDI-Classes/Bitmap.@LTO@ $(XFORMDEP) xsrc/Bitmap.cc: $(WXDIR)/src/GDI-Classes/Bitmap.cc $(WXBDIR)/src/GDI-Classes/Bitmap.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/src/GDI-Classes/Bitmap.cc xsrc/Bitmap.cc $(XFORM) xsrc/Bitmap.cc $(WXDIR)/src/GDI-Classes/Bitmap.cc
xsrc/Colour.cc: $(WXDIR)/src/GDI-Classes/Colour.cc $(WXBDIR)/src/GDI-Classes/Colour.@LTO@ $(XFORMDEP) xsrc/Colour.cc: $(WXDIR)/src/GDI-Classes/Colour.cc $(WXBDIR)/src/GDI-Classes/Colour.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/src/GDI-Classes/Colour.cc xsrc/Colour.cc $(XFORM) xsrc/Colour.cc $(WXDIR)/src/GDI-Classes/Colour.cc
xsrc/Font.cc: $(WXDIR)/src/GDI-Classes/Font.cc $(WXBDIR)/src/GDI-Classes/Font.@LTO@ $(XFORMDEP) xsrc/Font.cc: $(WXDIR)/src/GDI-Classes/Font.cc $(WXBDIR)/src/GDI-Classes/Font.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/src/GDI-Classes/Font.cc xsrc/Font.cc $(XFORM) xsrc/Font.cc $(WXDIR)/src/GDI-Classes/Font.cc
xsrc/FontDirectory.cc: $(WXDIR)/src/GDI-Classes/FontDirectory.cc $(WXBDIR)/src/GDI-Classes/FontDirectory.@LTO@ $(XFORMDEP) xsrc/FontDirectory.cc: $(WXDIR)/src/GDI-Classes/FontDirectory.cc $(WXBDIR)/src/GDI-Classes/FontDirectory.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/src/GDI-Classes/FontDirectory.cc xsrc/FontDirectory.cc $(XFORM) xsrc/FontDirectory.cc $(WXDIR)/src/GDI-Classes/FontDirectory.cc
xsrc/Pen+Brush.cc: $(WXDIR)/src/GDI-Classes/Pen+Brush.cc $(WXBDIR)/src/GDI-Classes/Pen+Brush.@LTO@ $(XFORMDEP) xsrc/Pen+Brush.cc: $(WXDIR)/src/GDI-Classes/Pen+Brush.cc $(WXBDIR)/src/GDI-Classes/Pen+Brush.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/src/GDI-Classes/Pen+Brush.cc xsrc/Pen+Brush.cc $(XFORM) xsrc/Pen+Brush.cc $(WXDIR)/src/GDI-Classes/Pen+Brush.cc
xsrc/Clipboard.cc: $(WXDIR)/src/Misc/Clipboard.cc $(WXBDIR)/src/Misc/Clipboard.@LTO@ $(XFORMDEP) xsrc/Clipboard.cc: $(WXDIR)/src/Misc/Clipboard.cc $(WXBDIR)/src/Misc/Clipboard.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/src/Misc/Clipboard.cc xsrc/Clipboard.cc $(XFORM) xsrc/Clipboard.cc $(WXDIR)/src/Misc/Clipboard.cc
xsrc/Timer.cc: $(WXDIR)/src/Misc/Timer.cc $(WXBDIR)/src/Misc/Timer.@LTO@ $(XFORMDEP) xsrc/Timer.cc: $(WXDIR)/src/Misc/Timer.cc $(WXBDIR)/src/Misc/Timer.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/src/Misc/Timer.cc xsrc/Timer.cc $(XFORM) xsrc/Timer.cc $(WXDIR)/src/Misc/Timer.cc
xsrc/Application.cc: $(WXDIR)/src/Utilities/Application.cc $(WXBDIR)/src/Utilities/Application.@LTO@ $(XFORMDEP) xsrc/Application.cc: $(WXDIR)/src/Utilities/Application.cc $(WXBDIR)/src/Utilities/Application.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/src/Utilities/Application.cc xsrc/Application.cc $(XFORM) xsrc/Application.cc $(WXDIR)/src/Utilities/Application.cc
xsrc/Assert.cc: $(WXDIR)/src/Utilities/Assert.cc $(WXBDIR)/src/Utilities/Assert.@LTO@ $(XFORMDEP) xsrc/Assert.cc: $(WXDIR)/src/Utilities/Assert.cc $(WXBDIR)/src/Utilities/Assert.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/src/Utilities/Assert.cc xsrc/Assert.cc $(XFORM) xsrc/Assert.cc $(WXDIR)/src/Utilities/Assert.cc
xsrc/BusyCursor.cc: $(WXDIR)/src/Utilities/BusyCursor.cc $(WXBDIR)/src/Utilities/BusyCursor.@LTO@ $(XFORMDEP) xsrc/BusyCursor.cc: $(WXDIR)/src/Utilities/BusyCursor.cc $(WXBDIR)/src/Utilities/BusyCursor.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/src/Utilities/BusyCursor.cc xsrc/BusyCursor.cc $(XFORM) xsrc/BusyCursor.cc $(WXDIR)/src/Utilities/BusyCursor.cc
xsrc/Date+Time.cc: $(WXDIR)/src/Utilities/Date+Time.cc $(WXBDIR)/src/Utilities/Date+Time.@LTO@ $(XFORMDEP) xsrc/Date+Time.cc: $(WXDIR)/src/Utilities/Date+Time.cc $(WXBDIR)/src/Utilities/Date+Time.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/src/Utilities/Date+Time.cc xsrc/Date+Time.cc $(XFORM) xsrc/Date+Time.cc $(WXDIR)/src/Utilities/Date+Time.cc
xsrc/Directory.cc: $(WXDIR)/src/Utilities/Directory.cc $(WXBDIR)/src/Utilities/Directory.@LTO@ $(XFORMDEP) xsrc/Directory.cc: $(WXDIR)/src/Utilities/Directory.cc $(WXBDIR)/src/Utilities/Directory.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/src/Utilities/Directory.cc xsrc/Directory.cc $(XFORM) xsrc/Directory.cc $(WXDIR)/src/Utilities/Directory.cc
xsrc/Error.cc: $(WXDIR)/src/Utilities/Error.cc $(WXBDIR)/src/Utilities/Error.@LTO@ $(XFORMDEP) xsrc/Error.cc: $(WXDIR)/src/Utilities/Error.cc $(WXBDIR)/src/Utilities/Error.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/src/Utilities/Error.cc xsrc/Error.cc $(XFORM) xsrc/Error.cc $(WXDIR)/src/Utilities/Error.cc
xsrc/GDI.cc: $(WXDIR)/src/Utilities/GDI.cc $(WXBDIR)/src/Utilities/GDI.@LTO@ $(XFORMDEP) xsrc/GDI.cc: $(WXDIR)/src/Utilities/GDI.cc $(WXBDIR)/src/Utilities/GDI.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/src/Utilities/GDI.cc xsrc/GDI.cc $(XFORM) xsrc/GDI.cc $(WXDIR)/src/Utilities/GDI.cc
xsrc/Home.cc: $(WXDIR)/src/Utilities/Home.cc $(WXBDIR)/src/Utilities/Home.@LTO@ $(XFORMDEP) xsrc/Home.cc: $(WXDIR)/src/Utilities/Home.cc $(WXBDIR)/src/Utilities/Home.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/src/Utilities/Home.cc xsrc/Home.cc $(XFORM) xsrc/Home.cc $(WXDIR)/src/Utilities/Home.cc
xsrc/Misc.cc: $(WXDIR)/src/Utilities/Misc.cc $(WXBDIR)/src/Utilities/Misc.@LTO@ $(XFORMDEP) xsrc/Misc.cc: $(WXDIR)/src/Utilities/Misc.cc $(WXBDIR)/src/Utilities/Misc.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/src/Utilities/Misc.cc xsrc/Misc.cc $(XFORM) xsrc/Misc.cc $(WXDIR)/src/Utilities/Misc.cc
xsrc/Net.c: $(WXDIR)/src/Utilities/Net.c $(WXBDIR)/src/Utilities/Net.@LTO@ $(XFORMDEP) xsrc/Net.c: $(WXDIR)/src/Utilities/Net.c $(WXBDIR)/src/Utilities/Net.@LTO@ $(XFORMDEP)
$(XFORM) $(WXDIR)/src/Utilities/Net.c xsrc/Net.c $(XFORM) xsrc/Net.c $(WXDIR)/src/Utilities/Net.c
xsrc/Path.cc: $(WXDIR)/src/Utilities/Path.cc $(WXBDIR)/src/Utilities/Path.@LTO@ $(XFORMDEP) xsrc/Path.cc: $(WXDIR)/src/Utilities/Path.cc $(WXBDIR)/src/Utilities/Path.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/src/Utilities/Path.cc xsrc/Path.cc $(XFORM) xsrc/Path.cc $(WXDIR)/src/Utilities/Path.cc
xsrc/Resources.cc: $(WXDIR)/src/Utilities/Resources.cc $(WXBDIR)/src/Utilities/Resources.@LTO@ $(XFORMDEP) xsrc/Resources.cc: $(WXDIR)/src/Utilities/Resources.cc $(WXBDIR)/src/Utilities/Resources.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/src/Utilities/Resources.cc xsrc/Resources.cc $(XFORM) xsrc/Resources.cc $(WXDIR)/src/Utilities/Resources.cc
xsrc/String.cc: $(WXDIR)/src/Utilities/String.cc $(WXBDIR)/src/Utilities/String.@LTO@ $(XFORMDEP) xsrc/String.cc: $(WXDIR)/src/Utilities/String.cc $(WXBDIR)/src/Utilities/String.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/src/Utilities/String.cc xsrc/String.cc $(XFORM) xsrc/String.cc $(WXDIR)/src/Utilities/String.cc
xsrc/TempFile.cc: $(WXDIR)/src/Utilities/TempFile.cc $(WXBDIR)/src/Utilities/TempFile.@LTO@ $(XFORMDEP) xsrc/TempFile.cc: $(WXDIR)/src/Utilities/TempFile.cc $(WXBDIR)/src/Utilities/TempFile.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/src/Utilities/TempFile.cc xsrc/TempFile.cc $(XFORM) xsrc/TempFile.cc $(WXDIR)/src/Utilities/TempFile.cc
xsrc/wx_image.cc: $(WXDIR)/utils/image/src/wx_image.cc $(WXBDIR)/utils/image/src/wx_image.@LTO@ $(XFORMDEP) xsrc/wx_image.cc: $(WXDIR)/utils/image/src/wx_image.cc $(WXBDIR)/utils/image/src/wx_image.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/utils/image/src/wx_image.cc xsrc/wx_image.cc $(XFORM) xsrc/wx_image.cc $(WXDIR)/utils/image/src/wx_image.cc
xsrc/wx_img.cc: $(WXDIR)/utils/image/src/wx_img.cc $(WXBDIR)/utils/image/src/wx_img.@LTO@ $(XFORMDEP) xsrc/wx_img.cc: $(WXDIR)/utils/image/src/wx_img.cc $(WXBDIR)/utils/image/src/wx_img.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/utils/image/src/wx_img.cc xsrc/wx_img.cc $(XFORM) xsrc/wx_img.cc $(WXDIR)/utils/image/src/wx_img.cc
xsrc/wx_24to8.cc: $(WXDIR)/utils/image/src/wx_24to8.cc $(WXBDIR)/utils/image/src/wx_24to8.@LTO@ $(XFORMDEP) xsrc/wx_24to8.cc: $(WXDIR)/utils/image/src/wx_24to8.cc $(WXBDIR)/utils/image/src/wx_24to8.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/utils/image/src/wx_24to8.cc xsrc/wx_24to8.cc $(XFORM) xsrc/wx_24to8.cc $(WXDIR)/utils/image/src/wx_24to8.cc
xsrc/wx_bmp.cc: $(WXDIR)/utils/image/src/wx_bmp.cc $(WXBDIR)/utils/image/src/wx_bmp.@LTO@ $(XFORMDEP) xsrc/wx_bmp.cc: $(WXDIR)/utils/image/src/wx_bmp.cc $(WXBDIR)/utils/image/src/wx_bmp.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/utils/image/src/wx_bmp.cc xsrc/wx_bmp.cc $(XFORM) xsrc/wx_bmp.cc $(WXDIR)/utils/image/src/wx_bmp.cc
xsrc/wx_gam.cc: $(WXDIR)/utils/image/src/wx_gam.cc $(WXBDIR)/utils/image/src/wx_gam.@LTO@ $(XFORMDEP) xsrc/wx_gam.cc: $(WXDIR)/utils/image/src/wx_gam.cc $(WXBDIR)/utils/image/src/wx_gam.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/utils/image/src/wx_gam.cc xsrc/wx_gam.cc $(XFORM) xsrc/wx_gam.cc $(WXDIR)/utils/image/src/wx_gam.cc
xsrc/wx_gif.cc: $(WXDIR)/utils/image/src/wx_gif.cc $(WXBDIR)/utils/image/src/wx_gif.@LTO@ $(XFORMDEP) xsrc/wx_gif.cc: $(WXDIR)/utils/image/src/wx_gif.cc $(WXBDIR)/utils/image/src/wx_gif.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/utils/image/src/wx_gif.cc xsrc/wx_gif.cc $(XFORM) xsrc/wx_gif.cc $(WXDIR)/utils/image/src/wx_gif.cc
xsrc/wx_gifwr.cc: $(WXDIR)/utils/image/src/wx_gifwr.cc $(WXBDIR)/utils/image/src/wx_gifwr.@LTO@ $(XFORMDEP) xsrc/wx_gifwr.cc: $(WXDIR)/utils/image/src/wx_gifwr.cc $(WXBDIR)/utils/image/src/wx_gifwr.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/utils/image/src/wx_gifwr.cc xsrc/wx_gifwr.cc $(XFORM) xsrc/wx_gifwr.cc $(WXDIR)/utils/image/src/wx_gifwr.cc
xsrc/wx_xbm.cc: $(WXDIR)/utils/image/src/wx_xbm.cc $(WXBDIR)/utils/image/src/wx_xbm.@LTO@ $(XFORMDEP) xsrc/wx_xbm.cc: $(WXDIR)/utils/image/src/wx_xbm.cc $(WXBDIR)/utils/image/src/wx_xbm.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXDIR)/utils/image/src/wx_xbm.cc xsrc/wx_xbm.cc $(XFORM) xsrc/wx_xbm.cc $(WXDIR)/utils/image/src/wx_xbm.cc
MACXPRECOMP = macxsrc/xform_precomp.h MACXPRECOMP = macxsrc/xform_precomp.h
macxsrc/xform_precomp.h : $(XFORMDEP) $(srcdir)/macprecomp.cxx $(srcdir)/../../mzscheme/src/schvers.h macxsrc/xform_precomp.h : $(XFORMDEP) $(srcdir)/macprecomp.cxx $(srcdir)/../../mzscheme/src/schvers.h
env XFORM_PRECOMP=yes $(XFORMXX) $(srcdir)/macprecomp.cxx $(MACXPRECOMP) env XFORM_PRECOMP=yes $(XFORM) $(MACXPRECOMP) $(srcdir)/macprecomp.cxx
@INCLUDEDEP@ macprecomp.d @INCLUDEDEP@ macprecomp.d
@ -213,267 +213,267 @@ wx_mac_XFORMWP = env XFORM_USE_PRECOMP=$(MACXPRECOMP) $(XFORMXX)
XFORMWP = $(@WXVARIANT@_XFORMWP) XFORMWP = $(@WXVARIANT@_XFORMWP)
macxsrc/wb_item.cc: $(WXMACDIR)/base/wb_item.cc $(WXMACBDIR)/wb_item.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wb_item.cc: $(WXMACDIR)/base/wb_item.cc $(WXMACBDIR)/wb_item.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/base/wb_item.cc macxsrc/wb_item.cc $(XFORMWP) macxsrc/wb_item.cc $(WXMACDIR)/base/wb_item.cc
macxsrc/wb_panel.cc: $(WXMACDIR)/base/wb_panel.cc $(WXMACBDIR)/wb_panel.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wb_panel.cc: $(WXMACDIR)/base/wb_panel.cc $(WXMACBDIR)/wb_panel.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/base/wb_panel.cc macxsrc/wb_panel.cc $(XFORMWP) macxsrc/wb_panel.cc $(WXMACDIR)/base/wb_panel.cc
macxsrc/wb_timer.cc: $(WXMACDIR)/base/wb_timer.cc $(WXMACBDIR)/wb_timer.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wb_timer.cc: $(WXMACDIR)/base/wb_timer.cc $(WXMACBDIR)/wb_timer.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/base/wb_timer.cc macxsrc/wb_timer.cc $(XFORMWP) macxsrc/wb_timer.cc $(WXMACDIR)/base/wb_timer.cc
macxsrc/wb_frame.cc: $(WXMACDIR)/base/wb_frame.cc $(WXMACBDIR)/wb_frame.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wb_frame.cc: $(WXMACDIR)/base/wb_frame.cc $(WXMACBDIR)/wb_frame.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/base/wb_frame.cc macxsrc/wb_frame.cc $(XFORMWP) macxsrc/wb_frame.cc $(WXMACDIR)/base/wb_frame.cc
macxsrc/wb_list.cc: $(srcdir)/../../wxcommon/wb_list.cxx $(WXMACBDIR)/wb_list.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wb_list.cc: $(srcdir)/../../wxcommon/wb_list.cxx $(WXMACBDIR)/wb_list.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/../../wxcommon/wb_list.cxx macxsrc/wb_list.cc $(XFORMWP) macxsrc/wb_list.cc $(WXMACDIR)/../../wxcommon/wb_list.cxx
macxsrc/PSDC.cc: $(srcdir)/../../wxcommon/PSDC.cxx $(WXMACBDIR)/PSDC.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/PSDC.cc: $(srcdir)/../../wxcommon/PSDC.cxx $(WXMACBDIR)/PSDC.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/../../wxcommon/PSDC.cxx macxsrc/PSDC.cc $(XFORMWP) macxsrc/PSDC.cc $(WXMACDIR)/../../wxcommon/PSDC.cxx
macxsrc/wb_types.cc: $(WXMACDIR)/base/wb_types.cc $(WXMACBDIR)/wb_types.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wb_types.cc: $(WXMACDIR)/base/wb_types.cc $(WXMACBDIR)/wb_types.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/base/wb_types.cc macxsrc/wb_types.cc $(XFORMWP) macxsrc/wb_types.cc $(WXMACDIR)/base/wb_types.cc
macxsrc/wb_canvs.cc: $(WXMACDIR)/base/wb_canvs.cc $(WXMACBDIR)/wb_canvs.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wb_canvs.cc: $(WXMACDIR)/base/wb_canvs.cc $(WXMACBDIR)/wb_canvs.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/base/wb_canvs.cc macxsrc/wb_canvs.cc $(XFORMWP) macxsrc/wb_canvs.cc $(WXMACDIR)/base/wb_canvs.cc
macxsrc/wb_gdi.cc: $(WXMACDIR)/base/wb_gdi.cc $(WXMACBDIR)/wb_gdi.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wb_gdi.cc: $(WXMACDIR)/base/wb_gdi.cc $(WXMACBDIR)/wb_gdi.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/base/wb_gdi.cc macxsrc/wb_gdi.cc $(XFORMWP) macxsrc/wb_gdi.cc $(WXMACDIR)/base/wb_gdi.cc
macxsrc/wb_main.cc: $(WXMACDIR)/base/wb_main.cc $(WXMACBDIR)/wb_main.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wb_main.cc: $(WXMACDIR)/base/wb_main.cc $(WXMACBDIR)/wb_main.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/base/wb_main.cc macxsrc/wb_main.cc $(XFORMWP) macxsrc/wb_main.cc $(WXMACDIR)/base/wb_main.cc
macxsrc/wb_utils.cc: $(WXMACDIR)/base/wb_utils.cc $(WXMACBDIR)/wb_utils.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wb_utils.cc: $(WXMACDIR)/base/wb_utils.cc $(WXMACBDIR)/wb_utils.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/base/wb_utils.cc macxsrc/wb_utils.cc $(XFORMWP) macxsrc/wb_utils.cc $(WXMACDIR)/base/wb_utils.cc
macxsrc/wb_data.cc: $(WXMACDIR)/base/wb_data.cc $(WXMACBDIR)/wb_data.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wb_data.cc: $(WXMACDIR)/base/wb_data.cc $(WXMACBDIR)/wb_data.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/base/wb_data.cc macxsrc/wb_data.cc $(XFORMWP) macxsrc/wb_data.cc $(WXMACDIR)/base/wb_data.cc
macxsrc/wb_hash.cc: $(srcdir)/../../wxcommon/wb_hash.cxx $(WXMACBDIR)/wb_hash.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wb_hash.cc: $(srcdir)/../../wxcommon/wb_hash.cxx $(WXMACBDIR)/wb_hash.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/../../wxcommon/wb_hash.cxx macxsrc/wb_hash.cc $(XFORMWP) macxsrc/wb_hash.cc $(WXMACDIR)/../../wxcommon/wb_hash.cxx
macxsrc/wb_stdev.cc: $(WXMACDIR)/base/wb_stdev.cc $(WXMACBDIR)/wb_stdev.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wb_stdev.cc: $(WXMACDIR)/base/wb_stdev.cc $(WXMACBDIR)/wb_stdev.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/base/wb_stdev.cc macxsrc/wb_stdev.cc $(XFORMWP) macxsrc/wb_stdev.cc $(WXMACDIR)/base/wb_stdev.cc
macxsrc/wb_win.cc: $(WXMACDIR)/base/wb_win.cc $(WXMACBDIR)/wb_win.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wb_win.cc: $(WXMACDIR)/base/wb_win.cc $(WXMACBDIR)/wb_win.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/base/wb_win.cc macxsrc/wb_win.cc $(XFORMWP) macxsrc/wb_win.cc $(WXMACDIR)/base/wb_win.cc
macxsrc/wb_dc.cc: $(WXMACDIR)/base/wb_dc.cc $(WXMACBDIR)/wb_dc.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wb_dc.cc: $(WXMACDIR)/base/wb_dc.cc $(WXMACBDIR)/wb_dc.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/base/wb_dc.cc macxsrc/wb_dc.cc $(XFORMWP) macxsrc/wb_dc.cc $(WXMACDIR)/base/wb_dc.cc
macxsrc/wb_sysev.cc: $(WXMACDIR)/base/wb_sysev.cc $(WXMACBDIR)/wb_sysev.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wb_sysev.cc: $(WXMACDIR)/base/wb_sysev.cc $(WXMACBDIR)/wb_sysev.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/base/wb_sysev.cc macxsrc/wb_sysev.cc $(XFORMWP) macxsrc/wb_sysev.cc $(WXMACDIR)/base/wb_sysev.cc
macxsrc/wb_dialg.cc: $(WXMACDIR)/base/wb_dialg.cc $(WXMACBDIR)/wb_dialg.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wb_dialg.cc: $(WXMACDIR)/base/wb_dialg.cc $(WXMACBDIR)/wb_dialg.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/base/wb_dialg.cc macxsrc/wb_dialg.cc $(XFORMWP) macxsrc/wb_dialg.cc $(WXMACDIR)/base/wb_dialg.cc
macxsrc/wb_obj.cc: $(WXMACDIR)/base/wb_obj.cc $(WXMACBDIR)/wb_obj.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wb_obj.cc: $(WXMACDIR)/base/wb_obj.cc $(WXMACBDIR)/wb_obj.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/base/wb_obj.cc macxsrc/wb_obj.cc $(XFORMWP) macxsrc/wb_obj.cc $(WXMACDIR)/base/wb_obj.cc
macxsrc/xfspline.cc: $(WXMACDIR)/base/xfspline.cc $(WXMACBDIR)/xfspline.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/xfspline.cc: $(WXMACDIR)/base/xfspline.cc $(WXMACBDIR)/xfspline.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/base/xfspline.cc macxsrc/xfspline.cc $(XFORMWP) macxsrc/xfspline.cc $(WXMACDIR)/base/xfspline.cc
macxsrc/wx_choic.cc: $(WXMACDIR)/mac/wx_choic.cc $(WXMACBDIR)/wx_choic.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wx_choic.cc: $(WXMACDIR)/mac/wx_choic.cc $(WXMACBDIR)/wx_choic.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/mac/wx_choic.cc macxsrc/wx_choic.cc $(XFORMWP) macxsrc/wx_choic.cc $(WXMACDIR)/mac/wx_choic.cc
macxsrc/wx_main.cc: $(WXMACDIR)/mac/wx_main.cc $(WXMACBDIR)/wx_main.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wx_main.cc: $(WXMACDIR)/mac/wx_main.cc $(WXMACBDIR)/wx_main.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/mac/wx_main.cc macxsrc/wx_main.cc $(XFORMWP) macxsrc/wx_main.cc $(WXMACDIR)/mac/wx_main.cc
macxsrc/wx_clipb.cc: $(WXMACDIR)/mac/wx_clipb.cc $(WXMACBDIR)/wx_clipb.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wx_clipb.cc: $(WXMACDIR)/mac/wx_clipb.cc $(WXMACBDIR)/wx_clipb.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/mac/wx_clipb.cc macxsrc/wx_clipb.cc $(XFORMWP) macxsrc/wx_clipb.cc $(WXMACDIR)/mac/wx_clipb.cc
macxsrc/wx_menu.cc: $(WXMACDIR)/mac/wx_menu.cc $(WXMACBDIR)/wx_menu.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wx_menu.cc: $(WXMACDIR)/mac/wx_menu.cc $(WXMACBDIR)/wx_menu.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/mac/wx_menu.cc macxsrc/wx_menu.cc $(XFORMWP) macxsrc/wx_menu.cc $(WXMACDIR)/mac/wx_menu.cc
macxsrc/wx_messg.cc: $(WXMACDIR)/mac/wx_messg.cc $(WXMACBDIR)/wx_messg.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wx_messg.cc: $(WXMACDIR)/mac/wx_messg.cc $(WXMACBDIR)/wx_messg.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/mac/wx_messg.cc macxsrc/wx_messg.cc $(XFORMWP) macxsrc/wx_messg.cc $(WXMACDIR)/mac/wx_messg.cc
macxsrc/wxBorder.cc: $(WXMACDIR)/mac/wxBorder.cc $(WXMACBDIR)/wxBorder.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wxBorder.cc: $(WXMACDIR)/mac/wxBorder.cc $(WXMACBDIR)/wxBorder.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/mac/wxBorder.cc macxsrc/wxBorder.cc $(XFORMWP) macxsrc/wxBorder.cc $(WXMACDIR)/mac/wxBorder.cc
macxsrc/wx_dc.cc: $(WXMACDIR)/mac/wx_dc.cc $(WXMACBDIR)/wx_dc.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wx_dc.cc: $(WXMACDIR)/mac/wx_dc.cc $(WXMACBDIR)/wx_dc.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/mac/wx_dc.cc macxsrc/wx_dc.cc $(XFORMWP) macxsrc/wx_dc.cc $(WXMACDIR)/mac/wx_dc.cc
macxsrc/wxBorderArea.cc: $(WXMACDIR)/mac/wxBorderArea.cc $(WXMACBDIR)/wxBorderArea.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wxBorderArea.cc: $(WXMACDIR)/mac/wxBorderArea.cc $(WXMACBDIR)/wxBorderArea.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/mac/wxBorderArea.cc macxsrc/wxBorderArea.cc $(XFORMWP) macxsrc/wxBorderArea.cc $(WXMACDIR)/mac/wxBorderArea.cc
macxsrc/wx_dccan1.cc: $(WXMACDIR)/mac/wx_dccan1.cc $(WXMACBDIR)/wx_dccan1.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wx_dccan1.cc: $(WXMACDIR)/mac/wx_dccan1.cc $(WXMACBDIR)/wx_dccan1.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/mac/wx_dccan1.cc macxsrc/wx_dccan1.cc $(XFORMWP) macxsrc/wx_dccan1.cc $(WXMACDIR)/mac/wx_dccan1.cc
macxsrc/wx_mnuit.cc: $(WXMACDIR)/mac/wx_mnuit.cc $(WXMACBDIR)/wx_mnuit.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wx_mnuit.cc: $(WXMACDIR)/mac/wx_mnuit.cc $(WXMACBDIR)/wx_mnuit.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/mac/wx_mnuit.cc macxsrc/wx_mnuit.cc $(XFORMWP) macxsrc/wx_mnuit.cc $(WXMACDIR)/mac/wx_mnuit.cc
macxsrc/wxButtonBorder.cc: $(WXMACDIR)/mac/wxButtonBorder.cc $(WXMACBDIR)/wxButtonBorder.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wxButtonBorder.cc: $(WXMACDIR)/mac/wxButtonBorder.cc $(WXMACBDIR)/wxButtonBorder.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/mac/wxButtonBorder.cc macxsrc/wxButtonBorder.cc $(XFORMWP) macxsrc/wxButtonBorder.cc $(WXMACDIR)/mac/wxButtonBorder.cc
macxsrc/wx_dccan2.cc: $(WXMACDIR)/mac/wx_dccan2.cc $(WXMACBDIR)/wx_dccan2.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wx_dccan2.cc: $(WXMACDIR)/mac/wx_dccan2.cc $(WXMACBDIR)/wx_dccan2.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/mac/wx_dccan2.cc macxsrc/wx_dccan2.cc $(XFORMWP) macxsrc/wx_dccan2.cc $(WXMACDIR)/mac/wx_dccan2.cc
macxsrc/wx_dccan3.cc: $(WXMACDIR)/mac/wx_dccan3.cc $(WXMACBDIR)/wx_dccan3.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wx_dccan3.cc: $(WXMACDIR)/mac/wx_dccan3.cc $(WXMACBDIR)/wx_dccan3.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/mac/wx_dccan3.cc macxsrc/wx_dccan3.cc $(XFORMWP) macxsrc/wx_dccan3.cc $(WXMACDIR)/mac/wx_dccan3.cc
macxsrc/wx_panel.cc: $(WXMACDIR)/mac/wx_panel.cc $(WXMACBDIR)/wx_panel.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wx_panel.cc: $(WXMACDIR)/mac/wx_panel.cc $(WXMACBDIR)/wx_panel.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/mac/wx_panel.cc macxsrc/wx_panel.cc $(XFORMWP) macxsrc/wx_panel.cc $(WXMACDIR)/mac/wx_panel.cc
macxsrc/wxLabelArea.cc: $(WXMACDIR)/mac/wxLabelArea.cc $(WXMACBDIR)/wxLabelArea.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wxLabelArea.cc: $(WXMACDIR)/mac/wxLabelArea.cc $(WXMACBDIR)/wxLabelArea.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/mac/wxLabelArea.cc macxsrc/wxLabelArea.cc $(XFORMWP) macxsrc/wxLabelArea.cc $(WXMACDIR)/mac/wxLabelArea.cc
macxsrc/wx_dcmem.cc: $(WXMACDIR)/mac/wx_dcmem.cc $(WXMACBDIR)/wx_dcmem.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wx_dcmem.cc: $(WXMACDIR)/mac/wx_dcmem.cc $(WXMACBDIR)/wx_dcmem.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/mac/wx_dcmem.cc macxsrc/wx_dcmem.cc $(XFORMWP) macxsrc/wx_dcmem.cc $(WXMACDIR)/mac/wx_dcmem.cc
macxsrc/wx_print.cc: $(WXMACDIR)/mac/wx_print.cc $(WXMACBDIR)/wx_print.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wx_print.cc: $(WXMACDIR)/mac/wx_print.cc $(WXMACBDIR)/wx_print.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/mac/wx_print.cc macxsrc/wx_print.cc $(XFORMWP) macxsrc/wx_print.cc $(WXMACDIR)/mac/wx_print.cc
macxsrc/wxMacDC.cc: $(WXMACDIR)/mac/wxMacDC.cc $(WXMACBDIR)/wxMacDC.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wxMacDC.cc: $(WXMACDIR)/mac/wxMacDC.cc $(WXMACBDIR)/wxMacDC.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/mac/wxMacDC.cc macxsrc/wxMacDC.cc $(XFORMWP) macxsrc/wxMacDC.cc $(WXMACDIR)/mac/wxMacDC.cc
macxsrc/wx_dcpr1.cc: $(WXMACDIR)/mac/wx_dcpr1.cc $(WXMACBDIR)/wx_dcpr1.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wx_dcpr1.cc: $(WXMACDIR)/mac/wx_dcpr1.cc $(WXMACBDIR)/wx_dcpr1.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/mac/wx_dcpr1.cc macxsrc/wx_dcpr1.cc $(XFORMWP) macxsrc/wx_dcpr1.cc $(WXMACDIR)/mac/wx_dcpr1.cc
macxsrc/wx_rbox.cc: $(WXMACDIR)/mac/wx_rbox.cc $(WXMACBDIR)/wx_rbox.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wx_rbox.cc: $(WXMACDIR)/mac/wx_rbox.cc $(WXMACBDIR)/wx_rbox.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/mac/wx_rbox.cc macxsrc/wx_rbox.cc $(XFORMWP) macxsrc/wx_rbox.cc $(WXMACDIR)/mac/wx_rbox.cc
macxsrc/wx_rbut.cc: $(WXMACDIR)/mac/wx_rbut.cc $(WXMACBDIR)/wx_rbut.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wx_rbut.cc: $(WXMACDIR)/mac/wx_rbut.cc $(WXMACBDIR)/wx_rbut.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/mac/wx_rbut.cc macxsrc/wx_rbut.cc $(XFORMWP) macxsrc/wx_rbut.cc $(WXMACDIR)/mac/wx_rbut.cc
macxsrc/wx_sbar.cc: $(WXMACDIR)/mac/wx_sbar.cc $(WXMACBDIR)/wx_sbar.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wx_sbar.cc: $(WXMACDIR)/mac/wx_sbar.cc $(WXMACBDIR)/wx_sbar.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/mac/wx_sbar.cc macxsrc/wx_sbar.cc $(XFORMWP) macxsrc/wx_sbar.cc $(WXMACDIR)/mac/wx_sbar.cc
macxsrc/wxMargin.cc: $(WXMACDIR)/mac/wxMargin.cc $(WXMACBDIR)/wxMargin.@LTO@ $(XFORMDEP) macxsrc/wxMargin.cc: $(WXMACDIR)/mac/wxMargin.cc $(WXMACBDIR)/wxMargin.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXMACDIR)/mac/wxMargin.cc macxsrc/wxMargin.cc $(XFORM) macxsrc/wxMargin.cc $(WXMACDIR)/mac/wxMargin.cc
macxsrc/wx_dialg.cc: $(WXMACDIR)/mac/wx_dialg.cc $(WXMACBDIR)/wx_dialg.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wx_dialg.cc: $(WXMACDIR)/mac/wx_dialg.cc $(WXMACBDIR)/wx_dialg.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/mac/wx_dialg.cc macxsrc/wx_dialg.cc $(XFORMWP) macxsrc/wx_dialg.cc $(WXMACDIR)/mac/wx_dialg.cc
macxsrc/wx_screen.cc: $(WXMACDIR)/mac/wx_screen.cc $(WXMACBDIR)/wx_screen.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wx_screen.cc: $(WXMACDIR)/mac/wx_screen.cc $(WXMACBDIR)/wx_screen.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/mac/wx_screen.cc macxsrc/wx_screen.cc $(XFORMWP) macxsrc/wx_screen.cc $(WXMACDIR)/mac/wx_screen.cc
macxsrc/wxRectBorder.cc: $(WXMACDIR)/mac/wxRectBorder.cc $(WXMACBDIR)/wxRectBorder.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wxRectBorder.cc: $(WXMACDIR)/mac/wxRectBorder.cc $(WXMACBDIR)/wxRectBorder.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/mac/wxRectBorder.cc macxsrc/wxRectBorder.cc $(XFORMWP) macxsrc/wxRectBorder.cc $(WXMACDIR)/mac/wxRectBorder.cc
macxsrc/wx_slidr.cc: $(WXMACDIR)/mac/wx_slidr.cc $(WXMACBDIR)/wx_slidr.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wx_slidr.cc: $(WXMACDIR)/mac/wx_slidr.cc $(WXMACBDIR)/wx_slidr.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/mac/wx_slidr.cc macxsrc/wx_slidr.cc $(XFORMWP) macxsrc/wx_slidr.cc $(WXMACDIR)/mac/wx_slidr.cc
macxsrc/wxScroll.cc: $(WXMACDIR)/mac/wxScroll.cc $(WXMACBDIR)/wxScroll.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wxScroll.cc: $(WXMACDIR)/mac/wxScroll.cc $(WXMACBDIR)/wxScroll.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/mac/wxScroll.cc macxsrc/wxScroll.cc $(XFORMWP) macxsrc/wxScroll.cc $(WXMACDIR)/mac/wxScroll.cc
macxsrc/wx_frame.cc: $(WXMACDIR)/mac/wx_frame.cc $(WXMACBDIR)/wx_frame.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wx_frame.cc: $(WXMACDIR)/mac/wx_frame.cc $(WXMACBDIR)/wx_frame.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/mac/wx_frame.cc macxsrc/wx_frame.cc $(XFORMWP) macxsrc/wx_frame.cc $(WXMACDIR)/mac/wx_frame.cc
macxsrc/wxScrollArea.cc: $(WXMACDIR)/mac/wxScrollArea.cc $(WXMACBDIR)/wxScrollArea.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wxScrollArea.cc: $(WXMACDIR)/mac/wxScrollArea.cc $(WXMACBDIR)/wxScrollArea.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/mac/wxScrollArea.cc macxsrc/wxScrollArea.cc $(XFORMWP) macxsrc/wxScrollArea.cc $(WXMACDIR)/mac/wxScrollArea.cc
macxsrc/wx_gauge.cc: $(WXMACDIR)/mac/wx_gauge.cc $(WXMACBDIR)/wx_gauge.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wx_gauge.cc: $(WXMACDIR)/mac/wx_gauge.cc $(WXMACBDIR)/wx_gauge.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/mac/wx_gauge.cc macxsrc/wx_gauge.cc $(XFORMWP) macxsrc/wx_gauge.cc $(WXMACDIR)/mac/wx_gauge.cc
macxsrc/wxScrollData.cc: $(WXMACDIR)/mac/wxScrollData.cc $(WXMACBDIR)/wxScrollData.@LTO@ $(XFORMDEP) macxsrc/wxScrollData.cc: $(WXMACDIR)/mac/wxScrollData.cc $(WXMACBDIR)/wxScrollData.@LTO@ $(XFORMDEP)
$(XFORMXX) $(WXMACDIR)/mac/wxScrollData.cc macxsrc/wxScrollData.cc $(XFORM) macxsrc/wxScrollData.cc $(WXMACDIR)/mac/wxScrollData.cc
macxsrc/wx_gdi.cc: $(WXMACDIR)/mac/wx_gdi.cc $(WXMACBDIR)/wx_gdi.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wx_gdi.cc: $(WXMACDIR)/mac/wx_gdi.cc $(WXMACBDIR)/wx_gdi.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/mac/wx_gdi.cc macxsrc/wx_gdi.cc $(XFORMWP) macxsrc/wx_gdi.cc $(WXMACDIR)/mac/wx_gdi.cc
macxsrc/wx_app.cc: $(WXMACDIR)/mac/wx_app.cc $(WXMACBDIR)/wx_app.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wx_app.cc: $(WXMACDIR)/mac/wx_app.cc $(WXMACBDIR)/wx_app.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/mac/wx_app.cc macxsrc/wx_app.cc $(XFORMWP) macxsrc/wx_app.cc $(WXMACDIR)/mac/wx_app.cc
macxsrc/wx_util.cc: $(WXMACDIR)/mac/wx_util.cc $(WXMACBDIR)/wx_util.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wx_util.cc: $(WXMACDIR)/mac/wx_util.cc $(WXMACBDIR)/wx_util.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/mac/wx_util.cc macxsrc/wx_util.cc $(XFORMWP) macxsrc/wx_util.cc $(WXMACDIR)/mac/wx_util.cc
macxsrc/wx_area.cc: $(WXMACDIR)/mac/wx_area.cc $(WXMACBDIR)/wx_area.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wx_area.cc: $(WXMACDIR)/mac/wx_area.cc $(WXMACBDIR)/wx_area.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/mac/wx_area.cc macxsrc/wx_area.cc $(XFORMWP) macxsrc/wx_area.cc $(WXMACDIR)/mac/wx_area.cc
macxsrc/wx_win.cc: $(WXMACDIR)/mac/wx_win.cc $(WXMACBDIR)/wx_win.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wx_win.cc: $(WXMACDIR)/mac/wx_win.cc $(WXMACBDIR)/wx_win.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/mac/wx_win.cc macxsrc/wx_win.cc $(XFORMWP) macxsrc/wx_win.cc $(WXMACDIR)/mac/wx_win.cc
macxsrc/wx_buttn.cc: $(WXMACDIR)/mac/wx_buttn.cc $(WXMACBDIR)/wx_buttn.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wx_buttn.cc: $(WXMACDIR)/mac/wx_buttn.cc $(WXMACBDIR)/wx_buttn.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/mac/wx_buttn.cc macxsrc/wx_buttn.cc $(XFORMWP) macxsrc/wx_buttn.cc $(WXMACDIR)/mac/wx_buttn.cc
macxsrc/wx_item.cc: $(WXMACDIR)/mac/wx_item.cc $(WXMACBDIR)/wx_item.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wx_item.cc: $(WXMACDIR)/mac/wx_item.cc $(WXMACBDIR)/wx_item.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/mac/wx_item.cc macxsrc/wx_item.cc $(XFORMWP) macxsrc/wx_item.cc $(WXMACDIR)/mac/wx_item.cc
macxsrc/wximgfil.cc: $(WXMACDIR)/mac/wximgfil.cc $(WXMACBDIR)/wximgfil.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wximgfil.cc: $(WXMACDIR)/mac/wximgfil.cc $(WXMACBDIR)/wximgfil.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/mac/wximgfil.cc macxsrc/wximgfil.cc $(XFORMWP) macxsrc/wximgfil.cc $(WXMACDIR)/mac/wximgfil.cc
macxsrc/wx_canvs.cc: $(WXMACDIR)/mac/wx_canvs.cc $(WXMACBDIR)/wx_canvs.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wx_canvs.cc: $(WXMACDIR)/mac/wx_canvs.cc $(WXMACBDIR)/wx_canvs.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/mac/wx_canvs.cc macxsrc/wx_canvs.cc $(XFORMWP) macxsrc/wx_canvs.cc $(WXMACDIR)/mac/wx_canvs.cc
macxsrc/wx_lbox.cc: $(WXMACDIR)/mac/wx_lbox.cc $(WXMACBDIR)/wx_lbox.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wx_lbox.cc: $(WXMACDIR)/mac/wx_lbox.cc $(WXMACBDIR)/wx_lbox.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/mac/wx_lbox.cc macxsrc/wx_lbox.cc $(XFORMWP) macxsrc/wx_lbox.cc $(WXMACDIR)/mac/wx_lbox.cc
macxsrc/wx_check.cc: $(WXMACDIR)/mac/wx_check.cc $(WXMACBDIR)/wx_check.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wx_check.cc: $(WXMACDIR)/mac/wx_check.cc $(WXMACBDIR)/wx_check.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/mac/wx_check.cc macxsrc/wx_check.cc $(XFORMWP) macxsrc/wx_check.cc $(WXMACDIR)/mac/wx_check.cc
macxsrc/wx_tabc.cc: $(WXMACDIR)/mac/wx_tabc.cc $(WXMACBDIR)/wx_tabc.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wx_tabc.cc: $(WXMACDIR)/mac/wx_tabc.cc $(WXMACBDIR)/wx_tabc.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/mac/wx_tabc.cc macxsrc/wx_tabc.cc $(XFORMWP) macxsrc/wx_tabc.cc $(WXMACDIR)/mac/wx_tabc.cc
macxsrc/wx_gbox.cc: $(WXMACDIR)/mac/wx_gbox.cc $(WXMACBDIR)/wx_gbox.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wx_gbox.cc: $(WXMACDIR)/mac/wx_gbox.cc $(WXMACBDIR)/wx_gbox.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/mac/wx_gbox.cc macxsrc/wx_gbox.cc $(XFORMWP) macxsrc/wx_gbox.cc $(WXMACDIR)/mac/wx_gbox.cc
macxsrc/wx_mac_utils.cc: $(WXMACDIR)/mac/wx_mac_utils.cc $(WXMACBDIR)/wx_mac_utils.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wx_mac_utils.cc: $(WXMACDIR)/mac/wx_mac_utils.cc $(WXMACBDIR)/wx_mac_utils.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/mac/wx_mac_utils.cc macxsrc/wx_mac_utils.cc $(XFORMWP) macxsrc/wx_mac_utils.cc $(WXMACDIR)/mac/wx_mac_utils.cc
macxsrc/wx_bmp.cc: $(WXMACDIR)/../utils/image/src/wx_bmp.cc $(WXMACBDIR)/wx_bmp.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wx_bmp.cc: $(WXMACDIR)/../utils/image/src/wx_bmp.cc $(WXMACBDIR)/wx_bmp.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/../utils/image/src/wx_bmp.cc macxsrc/wx_bmp.cc $(XFORMWP) macxsrc/wx_bmp.cc $(WXMACDIR)/../utils/image/src/wx_bmp.cc
macxsrc/wx_24to8.cc: $(WXMACDIR)/../utils/image/src/wx_24to8.cc $(WXMACBDIR)/wx_24to8.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wx_24to8.cc: $(WXMACDIR)/../utils/image/src/wx_24to8.cc $(WXMACBDIR)/wx_24to8.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/../utils/image/src/wx_24to8.cc macxsrc/wx_24to8.cc $(XFORMWP) macxsrc/wx_24to8.cc $(WXMACDIR)/../utils/image/src/wx_24to8.cc
macxsrc/wx_image.cc: $(WXMACDIR)/../utils/image/src/wx_image.cc $(WXMACBDIR)/wx_image.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wx_image.cc: $(WXMACDIR)/../utils/image/src/wx_image.cc $(WXMACBDIR)/wx_image.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/../utils/image/src/wx_image.cc macxsrc/wx_image.cc $(XFORMWP) macxsrc/wx_image.cc $(WXMACDIR)/../utils/image/src/wx_image.cc
macxsrc/wx_xbm.cc: $(WXMACDIR)/../utils/image/src/wx_xbm.cc $(WXMACBDIR)/wx_xbm.@LTO@ $(XFORMDEP) $(MACXPRECOMP) macxsrc/wx_xbm.cc: $(WXMACDIR)/../utils/image/src/wx_xbm.cc $(WXMACBDIR)/wx_xbm.@LTO@ $(XFORMDEP) $(MACXPRECOMP)
$(XFORMWP) $(WXMACDIR)/../utils/image/src/wx_xbm.cc macxsrc/wx_xbm.cc $(XFORMWP) macxsrc/wx_xbm.cc $(WXMACDIR)/../utils/image/src/wx_xbm.cc
macxsrc/simpledrop.cc: $(srcdir)/../../mac/mzscheme/simpledrop.cpp ../simpledrop.@LTO@ $(XFORMDEP) macxsrc/simpledrop.cc: $(srcdir)/../../mac/mzscheme/simpledrop.cpp ../simpledrop.@LTO@ $(XFORMDEP)
$(XFORMXX) $(srcdir)/../../mac/mzscheme/simpledrop.cpp macxsrc/simpledrop.cc $(XFORM) macxsrc/simpledrop.cc $(srcdir)/../../mac/mzscheme/simpledrop.cpp
wx_xt_XFORMPRECOMP = wx_xt_XFORMPRECOMP =
wx_mac_XFORMPRECOMP = $(MACXPRECOMP) wx_mac_XFORMPRECOMP = $(MACXPRECOMP)
XFORMPRECOMP = $(@WXVARIANT@_XFORMPRECOMP) XFORMPRECOMP = $(@WXVARIANT@_XFORMPRECOMP)
xsrc/wx_media.cc: $(srcdir)/../wxme/wx_media.cxx ../wxme/wx_media.@LTO@ $(XFORMDEP) $(XPRECOMP) xsrc/wx_media.cc: $(srcdir)/../wxme/wx_media.cxx ../wxme/wx_media.@LTO@ $(XFORMDEP) $(XPRECOMP)
$(XFORMWP) $(srcdir)/../wxme/wx_media.cxx xsrc/wx_media.cc $(XFORMWP) xsrc/wx_media.cc $(srcdir)/../wxme/wx_media.cxx
xsrc/wx_mpriv.cc: $(srcdir)/../wxme/wx_mpriv.cxx ../wxme/wx_mpriv.@LTO@ $(XFORMDEP) $(XPRECOMP) xsrc/wx_mpriv.cc: $(srcdir)/../wxme/wx_mpriv.cxx ../wxme/wx_mpriv.@LTO@ $(XFORMDEP) $(XPRECOMP)
$(XFORMWP) $(srcdir)/../wxme/wx_mpriv.cxx xsrc/wx_mpriv.cc $(XFORMWP) xsrc/wx_mpriv.cc $(srcdir)/../wxme/wx_mpriv.cxx
xsrc/wx_snip.cc: $(srcdir)/../wxme/wx_snip.cxx ../wxme/wx_snip.@LTO@ $(XFORMDEP) $(XPRECOMP) xsrc/wx_snip.cc: $(srcdir)/../wxme/wx_snip.cxx ../wxme/wx_snip.@LTO@ $(XFORMDEP) $(XPRECOMP)
$(XFORMWP) $(srcdir)/../wxme/wx_snip.cxx xsrc/wx_snip.cc $(XFORMWP) xsrc/wx_snip.cc $(srcdir)/../wxme/wx_snip.cxx
xsrc/wx_msnip.cc: $(srcdir)/../wxme/wx_msnip.cxx ../wxme/wx_msnip.@LTO@ $(XFORMDEP) $(XPRECOMP) xsrc/wx_msnip.cc: $(srcdir)/../wxme/wx_msnip.cxx ../wxme/wx_msnip.@LTO@ $(XFORMDEP) $(XPRECOMP)
$(XFORMWP) $(srcdir)/../wxme/wx_msnip.cxx xsrc/wx_msnip.cc $(XFORMWP) xsrc/wx_msnip.cc $(srcdir)/../wxme/wx_msnip.cxx
xsrc/wx_mbuf.cc: $(srcdir)/../wxme/wx_mbuf.cxx ../wxme/wx_mbuf.@LTO@ $(XFORMDEP) $(XPRECOMP) xsrc/wx_mbuf.cc: $(srcdir)/../wxme/wx_mbuf.cxx ../wxme/wx_mbuf.@LTO@ $(XFORMDEP) $(XPRECOMP)
$(XFORMWP) $(srcdir)/../wxme/wx_mbuf.cxx xsrc/wx_mbuf.cc $(XFORMWP) xsrc/wx_mbuf.cc $(srcdir)/../wxme/wx_mbuf.cxx
xsrc/wx_mpbrd.cc: $(srcdir)/../wxme/wx_mpbrd.cxx ../wxme/wx_mpbrd.@LTO@ $(XFORMDEP) $(XPRECOMP) xsrc/wx_mpbrd.cc: $(srcdir)/../wxme/wx_mpbrd.cxx ../wxme/wx_mpbrd.@LTO@ $(XFORMDEP) $(XPRECOMP)
$(XFORMWP) $(srcdir)/../wxme/wx_mpbrd.cxx xsrc/wx_mpbrd.cc $(XFORMWP) xsrc/wx_mpbrd.cc $(srcdir)/../wxme/wx_mpbrd.cxx
xsrc/wx_keym.cc: $(srcdir)/../wxme/wx_keym.cxx ../wxme/wx_keym.@LTO@ $(XFORMDEP) $(XPRECOMP) xsrc/wx_keym.cc: $(srcdir)/../wxme/wx_keym.cxx ../wxme/wx_keym.@LTO@ $(XFORMDEP) $(XPRECOMP)
$(XFORMWP) $(srcdir)/../wxme/wx_keym.cxx xsrc/wx_keym.cc $(XFORMWP) xsrc/wx_keym.cc $(srcdir)/../wxme/wx_keym.cxx
xsrc/wx_medio.cc: $(srcdir)/../wxme/wx_medio.cxx ../wxme/wx_medio.@LTO@ $(XFORMDEP) $(XPRECOMP) xsrc/wx_medio.cc: $(srcdir)/../wxme/wx_medio.cxx ../wxme/wx_medio.@LTO@ $(XFORMDEP) $(XPRECOMP)
$(XFORMWP) $(srcdir)/../wxme/wx_medio.cxx xsrc/wx_medio.cc $(XFORMWP) xsrc/wx_medio.cc $(srcdir)/../wxme/wx_medio.cxx
xsrc/wx_medad.cc: $(srcdir)/../wxme/wx_medad.cxx ../wxme/wx_medad.@LTO@ $(XFORMDEP) $(XPRECOMP) xsrc/wx_medad.cc: $(srcdir)/../wxme/wx_medad.cxx ../wxme/wx_medad.@LTO@ $(XFORMDEP) $(XPRECOMP)
$(XFORMWP) $(srcdir)/../wxme/wx_medad.cxx xsrc/wx_medad.cc $(XFORMWP) xsrc/wx_medad.cc $(srcdir)/../wxme/wx_medad.cxx
xsrc/wx_style.cc: $(srcdir)/../wxme/wx_style.cxx ../wxme/wx_style.@LTO@ $(XFORMDEP) $(XPRECOMP) xsrc/wx_style.cc: $(srcdir)/../wxme/wx_style.cxx ../wxme/wx_style.@LTO@ $(XFORMDEP) $(XPRECOMP)
$(XFORMWP) $(srcdir)/../wxme/wx_style.cxx xsrc/wx_style.cc $(XFORMWP) xsrc/wx_style.cc $(srcdir)/../wxme/wx_style.cxx
xsrc/wx_mline.cc: $(srcdir)/../wxme/wx_mline.cxx ../wxme/wx_mline.@LTO@ $(XFORMDEP) $(XPRECOMP) xsrc/wx_mline.cc: $(srcdir)/../wxme/wx_mline.cxx ../wxme/wx_mline.@LTO@ $(XFORMDEP) $(XPRECOMP)
$(XFORMWP) $(srcdir)/../wxme/wx_mline.cxx xsrc/wx_mline.cc $(XFORMWP) xsrc/wx_mline.cc $(srcdir)/../wxme/wx_mline.cxx
xsrc/wx_cgrec.cc: $(srcdir)/../wxme/wx_cgrec.cxx ../wxme/wx_cgrec.@LTO@ $(XFORMDEP) $(XPRECOMP) xsrc/wx_cgrec.cc: $(srcdir)/../wxme/wx_cgrec.cxx ../wxme/wx_cgrec.@LTO@ $(XFORMDEP) $(XPRECOMP)
$(XFORMWP) $(srcdir)/../wxme/wx_cgrec.cxx xsrc/wx_cgrec.cc $(XFORMWP) xsrc/wx_cgrec.cc $(srcdir)/../wxme/wx_cgrec.cxx
xsrc/wxscheme.cc: $(srcdir)/../wxs/wxscheme.cxx ../wxs/wxscheme.@LTO@ $(XFORMDEP) $(XPRECOMP) xsrc/wxscheme.cc: $(srcdir)/../wxs/wxscheme.cxx ../wxs/wxscheme.@LTO@ $(XFORMDEP) $(XPRECOMP)
$(XFORMWP) $(srcdir)/../wxs/wxscheme.cxx xsrc/wxscheme.cc $(XFORMWP) xsrc/wxscheme.cc $(srcdir)/../wxs/wxscheme.cxx
xsrc/xcglue.c: $(srcdir)/../../mzscheme/utils/xcglue.c ../wxs/xcglue.@LTO@ $(XFORMDEP) xsrc/xcglue.c: $(srcdir)/../../mzscheme/utils/xcglue.c ../wxs/xcglue.@LTO@ $(XFORMDEP)
$(XFORM) $(srcdir)/../../mzscheme/utils/xcglue.c xsrc/xcglue.c $(XFORM) xsrc/xcglue.c $(srcdir)/../../mzscheme/utils/xcglue.c
xsrc/mred.cc: $(srcdir)/../mred.cxx ../mred.@LTO@ $(XFORMDEP) $(XPRECOMP) xsrc/mred.cc: $(srcdir)/../mred.cxx ../mred.@LTO@ $(XFORMDEP) $(XPRECOMP)
$(XFORMWP) $(srcdir)/../mred.cxx xsrc/mred.cc $(XFORMWP) xsrc/mred.cc $(srcdir)/../mred.cxx
xsrc/mrmain.cc: $(srcdir)/../mrmain.cxx ../mrmain.@LTO@ $(XFORMDEP) $(XPRECOMP) xsrc/mrmain.cc: $(srcdir)/../mrmain.cxx ../mrmain.@LTO@ $(XFORMDEP) $(XPRECOMP)
$(XFORMWP) $(srcdir)/../mrmain.cxx xsrc/mrmain.cc $(XFORMWP) xsrc/mrmain.cc $(srcdir)/../mrmain.cxx
xsrc/mredx.cc: $(srcdir)/../mredx.cxx ../mredx.@LTO@ $(XFORMDEP) $(XPRECOMP) xsrc/mredx.cc: $(srcdir)/../mredx.cxx ../mredx.@LTO@ $(XFORMDEP) $(XPRECOMP)
$(XFORMWP) $(srcdir)/../mredx.cxx xsrc/mredx.cc $(XFORMWP) xsrc/mredx.cc $(srcdir)/../mredx.cxx
xsrc/mredmac.cc: $(srcdir)/../mredmac.cxx ../mredmac.@LTO@ $(XFORMDEP) $(XPRECOMP) xsrc/mredmac.cc: $(srcdir)/../mredmac.cxx ../mredmac.@LTO@ $(XFORMDEP) $(XPRECOMP)
$(XFORMWP) $(srcdir)/../mredmac.cxx xsrc/mredmac.cc $(XFORMWP) xsrc/mredmac.cc $(srcdir)/../mredmac.cxx
xsrc/wxs_bmap.cc: $(srcdir)/../wxs/wxs_bmap.cxx ../wxs/wxs_bmap.@LTO@ $(XFORMDEP) $(XFORMPRECOMP) xsrc/wxs_bmap.cc: $(srcdir)/../wxs/wxs_bmap.cxx ../wxs/wxs_bmap.@LTO@ $(XFORMDEP) $(XFORMPRECOMP)
$(XFORMWP) $(srcdir)/../wxs/wxs_bmap.cxx xsrc/wxs_bmap.cc $(XFORMWP) xsrc/wxs_bmap.cc $(srcdir)/../wxs/wxs_bmap.cxx
xsrc/wxs_butn.cc: $(srcdir)/../wxs/wxs_butn.cxx ../wxs/wxs_butn.@LTO@ $(XFORMDEP) $(XFORMPRECOMP) xsrc/wxs_butn.cc: $(srcdir)/../wxs/wxs_butn.cxx ../wxs/wxs_butn.@LTO@ $(XFORMDEP) $(XFORMPRECOMP)
$(XFORMWP) $(srcdir)/../wxs/wxs_butn.cxx xsrc/wxs_butn.cc $(XFORMWP) xsrc/wxs_butn.cc $(srcdir)/../wxs/wxs_butn.cxx
xsrc/wxs_chce.cc: $(srcdir)/../wxs/wxs_chce.cxx ../wxs/wxs_chce.@LTO@ $(XFORMDEP) $(XFORMPRECOMP) xsrc/wxs_chce.cc: $(srcdir)/../wxs/wxs_chce.cxx ../wxs/wxs_chce.@LTO@ $(XFORMDEP) $(XFORMPRECOMP)
$(XFORMWP) $(srcdir)/../wxs/wxs_chce.cxx xsrc/wxs_chce.cc $(XFORMWP) xsrc/wxs_chce.cc $(srcdir)/../wxs/wxs_chce.cxx
xsrc/wxs_ckbx.cc: $(srcdir)/../wxs/wxs_ckbx.cxx ../wxs/wxs_ckbx.@LTO@ $(XFORMDEP) $(XFORMPRECOMP) xsrc/wxs_ckbx.cc: $(srcdir)/../wxs/wxs_ckbx.cxx ../wxs/wxs_ckbx.@LTO@ $(XFORMDEP) $(XFORMPRECOMP)
$(XFORMWP) $(srcdir)/../wxs/wxs_ckbx.cxx xsrc/wxs_ckbx.cc $(XFORMWP) xsrc/wxs_ckbx.cc $(srcdir)/../wxs/wxs_ckbx.cxx
xsrc/wxs_cnvs.cc: $(srcdir)/../wxs/wxs_cnvs.cxx ../wxs/wxs_cnvs.@LTO@ $(XFORMDEP) $(XFORMPRECOMP) xsrc/wxs_cnvs.cc: $(srcdir)/../wxs/wxs_cnvs.cxx ../wxs/wxs_cnvs.@LTO@ $(XFORMDEP) $(XFORMPRECOMP)
$(XFORMWP) $(srcdir)/../wxs/wxs_cnvs.cxx xsrc/wxs_cnvs.cc $(XFORMWP) xsrc/wxs_cnvs.cc $(srcdir)/../wxs/wxs_cnvs.cxx
xsrc/wxs_dc.cc: $(srcdir)/../wxs/wxs_dc.cxx ../wxs/wxs_dc.@LTO@ $(XFORMDEP) $(XFORMPRECOMP) xsrc/wxs_dc.cc: $(srcdir)/../wxs/wxs_dc.cxx ../wxs/wxs_dc.@LTO@ $(XFORMDEP) $(XFORMPRECOMP)
$(XFORMWP) $(srcdir)/../wxs/wxs_dc.cxx xsrc/wxs_dc.cc $(XFORMWP) xsrc/wxs_dc.cc $(srcdir)/../wxs/wxs_dc.cxx
xsrc/wxs_evnt.cc: $(srcdir)/../wxs/wxs_evnt.cxx ../wxs/wxs_evnt.@LTO@ $(XFORMDEP) $(XFORMPRECOMP) xsrc/wxs_evnt.cc: $(srcdir)/../wxs/wxs_evnt.cxx ../wxs/wxs_evnt.@LTO@ $(XFORMDEP) $(XFORMPRECOMP)
$(XFORMWP) $(srcdir)/../wxs/wxs_evnt.cxx xsrc/wxs_evnt.cc $(XFORMWP) xsrc/wxs_evnt.cc $(srcdir)/../wxs/wxs_evnt.cxx
xsrc/wxs_fram.cc: $(srcdir)/../wxs/wxs_fram.cxx ../wxs/wxs_fram.@LTO@ $(XFORMDEP) $(XFORMPRECOMP) xsrc/wxs_fram.cc: $(srcdir)/../wxs/wxs_fram.cxx ../wxs/wxs_fram.@LTO@ $(XFORMDEP) $(XFORMPRECOMP)
$(XFORMWP) $(srcdir)/../wxs/wxs_fram.cxx xsrc/wxs_fram.cc $(XFORMWP) xsrc/wxs_fram.cc $(srcdir)/../wxs/wxs_fram.cxx
xsrc/wxs_gage.cc: $(srcdir)/../wxs/wxs_gage.cxx ../wxs/wxs_gage.@LTO@ $(XFORMDEP) $(XFORMPRECOMP) xsrc/wxs_gage.cc: $(srcdir)/../wxs/wxs_gage.cxx ../wxs/wxs_gage.@LTO@ $(XFORMDEP) $(XFORMPRECOMP)
$(XFORMWP) $(srcdir)/../wxs/wxs_gage.cxx xsrc/wxs_gage.cc $(XFORMWP) xsrc/wxs_gage.cc $(srcdir)/../wxs/wxs_gage.cxx
xsrc/wxs_gdi.cc: $(srcdir)/../wxs/wxs_gdi.cxx ../wxs/wxs_gdi.@LTO@ $(XFORMDEP) $(XFORMPRECOMP) xsrc/wxs_gdi.cc: $(srcdir)/../wxs/wxs_gdi.cxx ../wxs/wxs_gdi.@LTO@ $(XFORMDEP) $(XFORMPRECOMP)
$(XFORMWP) $(srcdir)/../wxs/wxs_gdi.cxx xsrc/wxs_gdi.cc $(XFORMWP) xsrc/wxs_gdi.cc $(srcdir)/../wxs/wxs_gdi.cxx
xsrc/wxs_glob.cc: $(srcdir)/../wxs/wxs_glob.cxx ../wxs/wxs_glob.@LTO@ $(XFORMDEP) $(XFORMPRECOMP) xsrc/wxs_glob.cc: $(srcdir)/../wxs/wxs_glob.cxx ../wxs/wxs_glob.@LTO@ $(XFORMDEP) $(XFORMPRECOMP)
$(XFORMWP) $(srcdir)/../wxs/wxs_glob.cxx xsrc/wxs_glob.cc $(XFORMWP) xsrc/wxs_glob.cc $(srcdir)/../wxs/wxs_glob.cxx
xsrc/wxs_item.cc: $(srcdir)/../wxs/wxs_item.cxx ../wxs/wxs_item.@LTO@ $(XFORMDEP) $(XFORMPRECOMP) xsrc/wxs_item.cc: $(srcdir)/../wxs/wxs_item.cxx ../wxs/wxs_item.@LTO@ $(XFORMDEP) $(XFORMPRECOMP)
$(XFORMWP) $(srcdir)/../wxs/wxs_item.cxx xsrc/wxs_item.cc $(XFORMWP) xsrc/wxs_item.cc $(srcdir)/../wxs/wxs_item.cxx
xsrc/wxs_lbox.cc: $(srcdir)/../wxs/wxs_lbox.cxx ../wxs/wxs_lbox.@LTO@ $(XFORMDEP) $(XFORMPRECOMP) xsrc/wxs_lbox.cc: $(srcdir)/../wxs/wxs_lbox.cxx ../wxs/wxs_lbox.@LTO@ $(XFORMDEP) $(XFORMPRECOMP)
$(XFORMWP) $(srcdir)/../wxs/wxs_lbox.cxx xsrc/wxs_lbox.cc $(XFORMWP) xsrc/wxs_lbox.cc $(srcdir)/../wxs/wxs_lbox.cxx
xsrc/wxs_madm.cc: $(srcdir)/../wxs/wxs_madm.cxx ../wxs/wxs_madm.@LTO@ $(XFORMDEP) $(XFORMPRECOMP) xsrc/wxs_madm.cc: $(srcdir)/../wxs/wxs_madm.cxx ../wxs/wxs_madm.@LTO@ $(XFORMDEP) $(XFORMPRECOMP)
$(XFORMWP) $(srcdir)/../wxs/wxs_madm.cxx xsrc/wxs_madm.cc $(XFORMWP) xsrc/wxs_madm.cc $(srcdir)/../wxs/wxs_madm.cxx
xsrc/wxs_mede.cc: $(srcdir)/../wxs/wxs_mede.cxx ../wxs/wxs_mede.@LTO@ $(XFORMDEP) $(XFORMPRECOMP) xsrc/wxs_mede.cc: $(srcdir)/../wxs/wxs_mede.cxx ../wxs/wxs_mede.@LTO@ $(XFORMDEP) $(XFORMPRECOMP)
$(XFORMWP) $(srcdir)/../wxs/wxs_mede.cxx xsrc/wxs_mede.cc $(XFORMWP) xsrc/wxs_mede.cc $(srcdir)/../wxs/wxs_mede.cxx
xsrc/wxs_medi.cc: $(srcdir)/../wxs/wxs_medi.cxx ../wxs/wxs_medi.@LTO@ $(XFORMDEP) $(XFORMPRECOMP) xsrc/wxs_medi.cc: $(srcdir)/../wxs/wxs_medi.cxx ../wxs/wxs_medi.@LTO@ $(XFORMDEP) $(XFORMPRECOMP)
$(XFORMWP) $(srcdir)/../wxs/wxs_medi.cxx xsrc/wxs_medi.cc $(XFORMWP) xsrc/wxs_medi.cc $(srcdir)/../wxs/wxs_medi.cxx
xsrc/wxs_menu.cc: $(srcdir)/../wxs/wxs_menu.cxx ../wxs/wxs_menu.@LTO@ $(XFORMDEP) $(XFORMPRECOMP) xsrc/wxs_menu.cc: $(srcdir)/../wxs/wxs_menu.cxx ../wxs/wxs_menu.@LTO@ $(XFORMDEP) $(XFORMPRECOMP)
$(XFORMWP) $(srcdir)/../wxs/wxs_menu.cxx xsrc/wxs_menu.cc $(XFORMWP) xsrc/wxs_menu.cc $(srcdir)/../wxs/wxs_menu.cxx
xsrc/wxs_mio.cc: $(srcdir)/../wxs/wxs_mio.cxx ../wxs/wxs_mio.@LTO@ $(XFORMDEP) $(XFORMPRECOMP) xsrc/wxs_mio.cc: $(srcdir)/../wxs/wxs_mio.cxx ../wxs/wxs_mio.@LTO@ $(XFORMDEP) $(XFORMPRECOMP)
$(XFORMWP) $(srcdir)/../wxs/wxs_mio.cxx xsrc/wxs_mio.cc $(XFORMWP) xsrc/wxs_mio.cc $(srcdir)/../wxs/wxs_mio.cxx
xsrc/wxs_misc.cc: $(srcdir)/../wxs/wxs_misc.cxx ../wxs/wxs_misc.@LTO@ $(XFORMDEP) $(XFORMPRECOMP) xsrc/wxs_misc.cc: $(srcdir)/../wxs/wxs_misc.cxx ../wxs/wxs_misc.@LTO@ $(XFORMDEP) $(XFORMPRECOMP)
$(XFORMWP) $(srcdir)/../wxs/wxs_misc.cxx xsrc/wxs_misc.cc $(XFORMWP) xsrc/wxs_misc.cc $(srcdir)/../wxs/wxs_misc.cxx
xsrc/wxs_mpb.cc: $(srcdir)/../wxs/wxs_mpb.cxx ../wxs/wxs_mpb.@LTO@ $(XFORMDEP) $(XFORMPRECOMP) xsrc/wxs_mpb.cc: $(srcdir)/../wxs/wxs_mpb.cxx ../wxs/wxs_mpb.@LTO@ $(XFORMDEP) $(XFORMPRECOMP)
$(XFORMWP) $(srcdir)/../wxs/wxs_mpb.cxx xsrc/wxs_mpb.cc $(XFORMWP) xsrc/wxs_mpb.cc $(srcdir)/../wxs/wxs_mpb.cxx
xsrc/wxs_obj.cc: $(srcdir)/../wxs/wxs_obj.cxx ../wxs/wxs_obj.@LTO@ $(XFORMDEP) $(XFORMPRECOMP) xsrc/wxs_obj.cc: $(srcdir)/../wxs/wxs_obj.cxx ../wxs/wxs_obj.@LTO@ $(XFORMDEP) $(XFORMPRECOMP)
$(XFORMWP) $(srcdir)/../wxs/wxs_obj.cxx xsrc/wxs_obj.cc $(XFORMWP) xsrc/wxs_obj.cc $(srcdir)/../wxs/wxs_obj.cxx
xsrc/wxs_panl.cc: $(srcdir)/../wxs/wxs_panl.cxx ../wxs/wxs_panl.@LTO@ $(XFORMDEP) $(XFORMPRECOMP) xsrc/wxs_panl.cc: $(srcdir)/../wxs/wxs_panl.cxx ../wxs/wxs_panl.@LTO@ $(XFORMDEP) $(XFORMPRECOMP)
$(XFORMWP) $(srcdir)/../wxs/wxs_panl.cxx xsrc/wxs_panl.cc $(XFORMWP) xsrc/wxs_panl.cc $(srcdir)/../wxs/wxs_panl.cxx
xsrc/wxs_rado.cc: $(srcdir)/../wxs/wxs_rado.cxx ../wxs/wxs_rado.@LTO@ $(XFORMDEP) $(XFORMPRECOMP) xsrc/wxs_rado.cc: $(srcdir)/../wxs/wxs_rado.cxx ../wxs/wxs_rado.@LTO@ $(XFORMDEP) $(XFORMPRECOMP)
$(XFORMWP) $(srcdir)/../wxs/wxs_rado.cxx xsrc/wxs_rado.cc $(XFORMWP) xsrc/wxs_rado.cc $(srcdir)/../wxs/wxs_rado.cxx
xsrc/wxs_slid.cc: $(srcdir)/../wxs/wxs_slid.cxx ../wxs/wxs_slid.@LTO@ $(XFORMDEP) $(XFORMPRECOMP) xsrc/wxs_slid.cc: $(srcdir)/../wxs/wxs_slid.cxx ../wxs/wxs_slid.@LTO@ $(XFORMDEP) $(XFORMPRECOMP)
$(XFORMWP) $(srcdir)/../wxs/wxs_slid.cxx xsrc/wxs_slid.cc $(XFORMWP) xsrc/wxs_slid.cc $(srcdir)/../wxs/wxs_slid.cxx
xsrc/wxs_snip.cc: $(srcdir)/../wxs/wxs_snip.cxx ../wxs/wxs_snip.@LTO@ $(XFORMDEP) $(XFORMPRECOMP) xsrc/wxs_snip.cc: $(srcdir)/../wxs/wxs_snip.cxx ../wxs/wxs_snip.@LTO@ $(XFORMDEP) $(XFORMPRECOMP)
$(XFORMWP) $(srcdir)/../wxs/wxs_snip.cxx xsrc/wxs_snip.cc $(XFORMWP) xsrc/wxs_snip.cc $(srcdir)/../wxs/wxs_snip.cxx
xsrc/wxs_styl.cc: $(srcdir)/../wxs/wxs_styl.cxx ../wxs/wxs_styl.@LTO@ $(XFORMDEP) $(XFORMPRECOMP) xsrc/wxs_styl.cc: $(srcdir)/../wxs/wxs_styl.cxx ../wxs/wxs_styl.@LTO@ $(XFORMDEP) $(XFORMPRECOMP)
$(XFORMWP) $(srcdir)/../wxs/wxs_styl.cxx xsrc/wxs_styl.cc $(XFORMWP) xsrc/wxs_styl.cc $(srcdir)/../wxs/wxs_styl.cxx
xsrc/wxs_tabc.cc: $(srcdir)/../wxs/wxs_tabc.cxx ../wxs/wxs_tabc.@LTO@ $(XFORMDEP) $(XFORMPRECOMP) xsrc/wxs_tabc.cc: $(srcdir)/../wxs/wxs_tabc.cxx ../wxs/wxs_tabc.@LTO@ $(XFORMDEP) $(XFORMPRECOMP)
$(XFORMWP) $(srcdir)/../wxs/wxs_tabc.cxx xsrc/wxs_tabc.cc $(XFORMWP) xsrc/wxs_tabc.cc $(srcdir)/../wxs/wxs_tabc.cxx
xsrc/wxs_win.cc: $(srcdir)/../wxs/wxs_win.cxx ../wxs/wxs_win.@LTO@ $(XFORMDEP) $(XFORMPRECOMP) xsrc/wxs_win.cc: $(srcdir)/../wxs/wxs_win.cxx ../wxs/wxs_win.@LTO@ $(XFORMDEP) $(XFORMPRECOMP)
$(XFORMWP) $(srcdir)/../wxs/wxs_win.cxx xsrc/wxs_win.cc $(XFORMWP) xsrc/wxs_win.cc $(srcdir)/../wxs/wxs_win.cxx
xsrc/wxJPEG.cc: $(srcdir)/../../wxcommon/wxJPEG.cxx ../wxJPEG.@LTO@ $(XFORMDEP) $(XFORMPRECOMP) xsrc/wxJPEG.cc: $(srcdir)/../../wxcommon/wxJPEG.cxx ../wxJPEG.@LTO@ $(XFORMDEP) $(XFORMPRECOMP)
$(XFORMWP) $(srcdir)/../../wxcommon/wxJPEG.cxx xsrc/wxJPEG.cc $(XFORMWP) xsrc/wxJPEG.cc $(srcdir)/../../wxcommon/wxJPEG.cxx
GCPREINC = -include $(srcdir)/../../mzscheme/gc2/gc2.h GCPREINC = -include $(srcdir)/../../mzscheme/gc2/gc2.h
POSTFLAGS = $(OPTIONS) @COMPFLAGS@ @PROFFLAGS@ @CFLAGS@ POSTFLAGS = $(OPTIONS) @COMPFLAGS@ @PROFFLAGS@ @CFLAGS@
@ -1286,7 +1286,6 @@ wx_xt_PLAIN_OBJS = \
../../wxxt/src/XWidgets/xwBoard.@LTO@ \ ../../wxxt/src/XWidgets/xwBoard.@LTO@ \
../../wxxt/src/XWidgets/xwEnforcer.@LTO@ \ ../../wxxt/src/XWidgets/xwEnforcer.@LTO@ \
../../wxxt/src/XWidgets/xwLabel.@LTO@ \ ../../wxxt/src/XWidgets/xwLabel.@LTO@ \
../../wxxt/src/XWidgets/xwScrollText.@LTO@ \
../../wxxt/src/XWidgets/xwTabString.@LTO@ \ ../../wxxt/src/XWidgets/xwTabString.@LTO@ \
../../wxxt/src/XWidgets/xwscroll.@LTO@ \ ../../wxxt/src/XWidgets/xwscroll.@LTO@ \
../../wxxt/src/XWidgets/xwButton.@LTO@ \ ../../wxxt/src/XWidgets/xwButton.@LTO@ \

View File

@ -269,7 +269,7 @@ int main(int argc, char *argv[])
#if defined(MZ_PRECISE_GC) #if defined(MZ_PRECISE_GC)
# ifndef wx_msw # ifndef wx_msw
stack_start = (void *)&__gc_var_stack__; stack_start = (void *)&__gc_var_stack__;
GC_init_type_tags(_scheme_last_type_, scheme_weak_box_type); GC_init_type_tags(_scheme_last_type_, scheme_weak_box_type, scheme_ephemeron_type);
# endif # endif
/* For Windows, WinMain inits the type tags. */ /* For Windows, WinMain inits the type tags. */
#endif #endif

View File

@ -390,7 +390,7 @@ Bool wxStyleChangeRecord::Undo(wxMediaBuffer *buffer)
return continued; return continued;
} }
class StyleChangeSnip : public wxObject class StyleChangeSnip /* : public wxObject */
{ {
public: public:
wxSnip *snip; wxSnip *snip;

View File

@ -968,6 +968,9 @@ public:
}; };
wxsMenuItem::wxsMenuItem(void) wxsMenuItem::wxsMenuItem(void)
#ifndef MZ_PRECISE_GC
: wxObject(WXGC_NO_CLEANUP)
#endif
{ {
#ifdef MZ_PRECISE_GC #ifdef MZ_PRECISE_GC
void *mid; void *mid;

View File

@ -110,6 +110,9 @@ public:
}; };
wxsMenuItem::wxsMenuItem(void) wxsMenuItem::wxsMenuItem(void)
#ifndef MZ_PRECISE_GC
: wxObject(WXGC_NO_CLEANUP)
#endif
{ {
#ifdef MZ_PRECISE_GC #ifdef MZ_PRECISE_GC
void *mid; void *mid;

View File

@ -667,6 +667,13 @@ void GC_finalize()
/* PLTSCHEME: for resetting the disapearing link */ /* PLTSCHEME: for resetting the disapearing link */
struct disappearing_link *done_dl = NULL, *last_done_dl = NULL; struct disappearing_link *done_dl = NULL, *last_done_dl = NULL;
/* PLTSCHEME: it's important to "push roots again" before
making disappearing links disappear, because this
step includes marking from ephemerons whose keys are
reachable. We want to mark before disappearing links
are disappeared. */
if (GC_push_last_roots_again) GC_push_last_roots_again();
/* Make disappearing links disappear */ /* Make disappearing links disappear */
/* PLTSCHEME: handle NULL real_link and remember old values */ /* PLTSCHEME: handle NULL real_link and remember old values */
for (i = 0; i < dl_size; i++) { for (i = 0; i < dl_size; i++) {

View File

@ -19,7 +19,8 @@ LIBS = @LIBS@
PRE_MZ@OSX@ = env DYLD_FRAMEWORK_PATH="`pwd`/.." PRE_MZ@OSX@ = env DYLD_FRAMEWORK_PATH="`pwd`/.."
PRE_MZ@NOT_OSX@ = PRE_MZ@NOT_OSX@ =
XFORM = $(PRE_MZ) ../mzscheme -rq $(srcdir)/xform.ss --setup "$(CPP) $(CPPFLAGS)" XFORM_SETUP = $(PRE_MZ) ../mzscheme -rq $(srcdir)/xform.ss --setup
XFORM = $(XFORM_SETUP) --cpp "$(CPP) $(CPPFLAGS)" -o
XSRCDIR = xsrc XSRCDIR = xsrc
SRCDIR = $(srcdir)/../src SRCDIR = $(srcdir)/../src
@ -116,83 +117,83 @@ xobjects: $(OBJS) main.@LTO@
XFORMDEP = $(srcdir)/gc2.h $(srcdir)/xform.ss $(srcdir)/xform-mod.ss XFORMDEP = $(srcdir)/gc2.h $(srcdir)/xform.ss $(srcdir)/xform-mod.ss
$(XSRCDIR)/salloc.c: ../src/salloc.@LTO@ $(XFORMDEP) $(XSRCDIR)/salloc.c: ../src/salloc.@LTO@ $(XFORMDEP)
$(XFORM) $(SRCDIR)/salloc.c $(XSRCDIR)/salloc.c $(XFORM) $(XSRCDIR)/salloc.c $(SRCDIR)/salloc.c
$(XSRCDIR)/bignum.c: ../src/bignum.@LTO@ $(XFORMDEP) $(XSRCDIR)/bignum.c: ../src/bignum.@LTO@ $(XFORMDEP)
$(XFORM) $(SRCDIR)/bignum.c $(XSRCDIR)/bignum.c $(XFORM) $(XSRCDIR)/bignum.c $(SRCDIR)/bignum.c
$(XSRCDIR)/bool.c: ../src/bool.@LTO@ $(XFORMDEP) $(XSRCDIR)/bool.c: ../src/bool.@LTO@ $(XFORMDEP)
$(XFORM) $(SRCDIR)/bool.c $(XSRCDIR)/bool.c $(XFORM) $(XSRCDIR)/bool.c $(SRCDIR)/bool.c
$(XSRCDIR)/builtin.c: ../src/builtin.@LTO@ $(XFORMDEP) $(XSRCDIR)/builtin.c: ../src/builtin.@LTO@ $(XFORMDEP)
$(XFORM) $(SRCDIR)/builtin.c $(XSRCDIR)/builtin.c $(XFORM) $(XSRCDIR)/builtin.c $(SRCDIR)/builtin.c
$(XSRCDIR)/char.c: ../src/char.@LTO@ $(XFORMDEP) $(XSRCDIR)/char.c: ../src/char.@LTO@ $(XFORMDEP)
$(XFORM) $(SRCDIR)/char.c $(XSRCDIR)/char.c $(XFORM) $(XSRCDIR)/char.c $(SRCDIR)/char.c
$(XSRCDIR)/complex.c: ../src/complex.@LTO@ $(XFORMDEP) $(XSRCDIR)/complex.c: ../src/complex.@LTO@ $(XFORMDEP)
$(XFORM) $(SRCDIR)/complex.c $(XSRCDIR)/complex.c $(XFORM) $(XSRCDIR)/complex.c $(SRCDIR)/complex.c
$(XSRCDIR)/dynext.c: ../src/dynext.@LTO@ $(XFORMDEP) $(XSRCDIR)/dynext.c: ../src/dynext.@LTO@ $(XFORMDEP)
$(XFORM) $(SRCDIR)/dynext.c $(XSRCDIR)/dynext.c $(XFORM) $(XSRCDIR)/dynext.c $(SRCDIR)/dynext.c
$(XSRCDIR)/env.c: ../src/env.@LTO@ $(XFORMDEP) $(XSRCDIR)/env.c: ../src/env.@LTO@ $(XFORMDEP)
$(XFORM) $(SRCDIR)/env.c $(XSRCDIR)/env.c $(XFORM) $(XSRCDIR)/env.c $(SRCDIR)/env.c
$(XSRCDIR)/error.c: ../src/error.@LTO@ $(XFORMDEP) $(XSRCDIR)/error.c: ../src/error.@LTO@ $(XFORMDEP)
$(XFORM) $(SRCDIR)/error.c $(XSRCDIR)/error.c $(XFORM) $(XSRCDIR)/error.c $(SRCDIR)/error.c
$(XSRCDIR)/eval.c: ../src/eval.@LTO@ $(XFORMDEP) $(XSRCDIR)/eval.c: ../src/eval.@LTO@ $(XFORMDEP)
$(XFORM) $(SRCDIR)/eval.c $(XSRCDIR)/eval.c $(XFORM) $(XSRCDIR)/eval.c $(SRCDIR)/eval.c
$(XSRCDIR)/file.c: ../src/file.@LTO@ $(XFORMDEP) $(XSRCDIR)/file.c: ../src/file.@LTO@ $(XFORMDEP)
$(XFORM) $(SRCDIR)/file.c $(XSRCDIR)/file.c $(XFORM) $(XSRCDIR)/file.c $(SRCDIR)/file.c
$(XSRCDIR)/fun.c: ../src/fun.@LTO@ $(XFORMDEP) $(XSRCDIR)/fun.c: ../src/fun.@LTO@ $(XFORMDEP)
$(XFORM) $(SRCDIR)/fun.c $(XSRCDIR)/fun.c $(XFORM) $(XSRCDIR)/fun.c $(SRCDIR)/fun.c
$(XSRCDIR)/hash.c: ../src/hash.@LTO@ $(XFORMDEP) $(XSRCDIR)/hash.c: ../src/hash.@LTO@ $(XFORMDEP)
$(XFORM) $(SRCDIR)/hash.c $(XSRCDIR)/hash.c $(XFORM) $(XSRCDIR)/hash.c $(SRCDIR)/hash.c
$(XSRCDIR)/image.c: ../src/image.@LTO@ $(XFORMDEP) $(XSRCDIR)/image.c: ../src/image.@LTO@ $(XFORMDEP)
$(XFORM) $(SRCDIR)/image.c $(XSRCDIR)/image.c $(XFORM) $(XSRCDIR)/image.c $(SRCDIR)/image.c
$(XSRCDIR)/module.c: ../src/module.@LTO@ $(XFORMDEP) $(XSRCDIR)/module.c: ../src/module.@LTO@ $(XFORMDEP)
$(XFORM) $(SRCDIR)/module.c $(XSRCDIR)/module.c $(XFORM) $(XSRCDIR)/module.c $(SRCDIR)/module.c
$(XSRCDIR)/list.c: ../src/list.@LTO@ $(XFORMDEP) $(XSRCDIR)/list.c: ../src/list.@LTO@ $(XFORMDEP)
$(XFORM) $(SRCDIR)/list.c $(XSRCDIR)/list.c $(XFORM) $(XSRCDIR)/list.c $(SRCDIR)/list.c
$(XSRCDIR)/network.c: ../src/network.@LTO@ $(XFORMDEP) $(XSRCDIR)/network.c: ../src/network.@LTO@ $(XFORMDEP)
$(XFORM) $(SRCDIR)/network.c $(XSRCDIR)/network.c $(XFORM) $(XSRCDIR)/network.c $(SRCDIR)/network.c
$(XSRCDIR)/numarith.c: ../src/numarith.@LTO@ $(XFORMDEP) $(XSRCDIR)/numarith.c: ../src/numarith.@LTO@ $(XFORMDEP)
$(XFORM) $(SRCDIR)/numarith.c $(XSRCDIR)/numarith.c $(XFORM) $(XSRCDIR)/numarith.c $(SRCDIR)/numarith.c
$(XSRCDIR)/number.c: ../src/number.@LTO@ $(XFORMDEP) $(XSRCDIR)/number.c: ../src/number.@LTO@ $(XFORMDEP)
$(XFORM) $(SRCDIR)/number.c $(XSRCDIR)/number.c $(XFORM) $(XSRCDIR)/number.c $(SRCDIR)/number.c
$(XSRCDIR)/numcomp.c: ../src/numcomp.@LTO@ $(XFORMDEP) $(XSRCDIR)/numcomp.c: ../src/numcomp.@LTO@ $(XFORMDEP)
$(XFORM) $(SRCDIR)/numcomp.c $(XSRCDIR)/numcomp.c $(XFORM) $(XSRCDIR)/numcomp.c $(SRCDIR)/numcomp.c
$(XSRCDIR)/numstr.c: ../src/numstr.@LTO@ $(XFORMDEP) $(XSRCDIR)/numstr.c: ../src/numstr.@LTO@ $(XFORMDEP)
$(XFORM) $(SRCDIR)/numstr.c $(XSRCDIR)/numstr.c $(XFORM) $(XSRCDIR)/numstr.c $(SRCDIR)/numstr.c
$(XSRCDIR)/port.c: ../src/port.@LTO@ $(XFORMDEP) $(XSRCDIR)/port.c: ../src/port.@LTO@ $(XFORMDEP)
$(XFORM) $(SRCDIR)/port.c $(XSRCDIR)/port.c $(XFORM) $(XSRCDIR)/port.c $(SRCDIR)/port.c
$(XSRCDIR)/portfun.c: ../src/portfun.@LTO@ $(XFORMDEP) $(XSRCDIR)/portfun.c: ../src/portfun.@LTO@ $(XFORMDEP)
$(XFORM) $(SRCDIR)/portfun.c $(XSRCDIR)/portfun.c $(XFORM) $(XSRCDIR)/portfun.c $(SRCDIR)/portfun.c
$(XSRCDIR)/print.c: ../src/print.@LTO@ $(XFORMDEP) $(XSRCDIR)/print.c: ../src/print.@LTO@ $(XFORMDEP)
$(XFORM) $(SRCDIR)/print.c $(XSRCDIR)/print.c $(XFORM) $(XSRCDIR)/print.c $(SRCDIR)/print.c
$(XSRCDIR)/rational.c: ../src/rational.@LTO@ $(XFORMDEP) $(XSRCDIR)/rational.c: ../src/rational.@LTO@ $(XFORMDEP)
$(XFORM) $(SRCDIR)/rational.c $(XSRCDIR)/rational.c $(XFORM) $(XSRCDIR)/rational.c $(SRCDIR)/rational.c
$(XSRCDIR)/read.c: ../src/read.@LTO@ $(XFORMDEP) $(XSRCDIR)/read.c: ../src/read.@LTO@ $(XFORMDEP)
$(XFORM) $(SRCDIR)/read.c $(XSRCDIR)/read.c $(XFORM) $(XSRCDIR)/read.c $(SRCDIR)/read.c
$(XSRCDIR)/regexp.c: ../src/regexp.@LTO@ $(XFORMDEP) $(XSRCDIR)/regexp.c: ../src/regexp.@LTO@ $(XFORMDEP)
$(XFORM) $(SRCDIR)/regexp.c $(XSRCDIR)/regexp.c $(XFORM) $(XSRCDIR)/regexp.c $(SRCDIR)/regexp.c
$(XSRCDIR)/sema.c: ../src/sema.@LTO@ $(XFORMDEP) $(XSRCDIR)/sema.c: ../src/sema.@LTO@ $(XFORMDEP)
$(XFORM) $(SRCDIR)/sema.c $(XSRCDIR)/sema.c $(XFORM) $(XSRCDIR)/sema.c $(SRCDIR)/sema.c
$(XSRCDIR)/setjmpup.c: ../src/setjmpup.@LTO@ $(XFORMDEP) $(XSRCDIR)/setjmpup.c: ../src/setjmpup.@LTO@ $(XFORMDEP)
$(XFORM) $(SRCDIR)/setjmpup.c $(XSRCDIR)/setjmpup.c $(XFORM) $(XSRCDIR)/setjmpup.c $(SRCDIR)/setjmpup.c
$(XSRCDIR)/string.c: ../src/string.@LTO@ $(XFORMDEP) $(XSRCDIR)/string.c: ../src/string.@LTO@ $(XFORMDEP)
$(XFORM) $(SRCDIR)/string.c $(XSRCDIR)/string.c -I$(OBJDIR) $(XFORM_SETUP) --cpp "$(CPP) -I$(OBJDIR) $(CPPFLAGS)" -o $(XSRCDIR)/string.c $(SRCDIR)/string.c
$(XSRCDIR)/struct.c: ../src/struct.@LTO@ $(XFORMDEP) $(XSRCDIR)/struct.c: ../src/struct.@LTO@ $(XFORMDEP)
$(XFORM) $(SRCDIR)/struct.c $(XSRCDIR)/struct.c $(XFORM) $(XSRCDIR)/struct.c $(SRCDIR)/struct.c
$(XSRCDIR)/stxobj.c: ../src/stxobj.@LTO@ $(XFORMDEP) $(XSRCDIR)/stxobj.c: ../src/stxobj.@LTO@ $(XFORMDEP)
$(XFORM) $(SRCDIR)/stxobj.c $(XSRCDIR)/stxobj.c $(XFORM) $(XSRCDIR)/stxobj.c $(SRCDIR)/stxobj.c
$(XSRCDIR)/symbol.c: ../src/symbol.@LTO@ $(XFORMDEP) $(XSRCDIR)/symbol.c: ../src/symbol.@LTO@ $(XFORMDEP)
$(XFORM) $(SRCDIR)/symbol.c $(XSRCDIR)/symbol.c $(XFORM) $(XSRCDIR)/symbol.c $(SRCDIR)/symbol.c
$(XSRCDIR)/syntax.c: ../src/syntax.@LTO@ $(XFORMDEP) $(XSRCDIR)/syntax.c: ../src/syntax.@LTO@ $(XFORMDEP)
$(XFORM) $(SRCDIR)/syntax.c $(XSRCDIR)/syntax.c $(XFORM) $(XSRCDIR)/syntax.c $(SRCDIR)/syntax.c
$(XSRCDIR)/thread.c: ../src/thread.@LTO@ $(XFORMDEP) $(XSRCDIR)/thread.c: ../src/thread.@LTO@ $(XFORMDEP)
$(XFORM) $(SRCDIR)/thread.c $(XSRCDIR)/thread.c $(XFORM) $(XSRCDIR)/thread.c $(SRCDIR)/thread.c
$(XSRCDIR)/type.c: ../src/type.@LTO@ $(XFORMDEP) $(XSRCDIR)/type.c: ../src/type.@LTO@ $(XFORMDEP)
$(XFORM) $(SRCDIR)/type.c $(XSRCDIR)/type.c $(XFORM) $(XSRCDIR)/type.c $(SRCDIR)/type.c
$(XSRCDIR)/vector.c: ../src/vector.@LTO@ $(XFORMDEP) $(XSRCDIR)/vector.c: ../src/vector.@LTO@ $(XFORMDEP)
$(XFORM) $(SRCDIR)/vector.c $(XSRCDIR)/vector.c $(XFORM) $(XSRCDIR)/vector.c $(SRCDIR)/vector.c
$(XSRCDIR)/foreign.c: ../../foreign/foreign.@LTO@ $(XFORMDEP) $(XSRCDIR)/foreign.c: ../../foreign/foreign.@LTO@ $(XFORMDEP)
$(XFORM)" -I../../foreign/gcc/libffi/include -I${SRCDIR}/../../mzscheme/src" $(SRCDIR)/../../foreign/foreign.c $(XSRCDIR)/foreign.c $(XFORM_SETUP) --cpp "$(CPP) $(CPPFLAGS) -I../../foreign/gcc/libffi/include -I${SRCDIR}/../../mzscheme/src" -o $(XSRCDIR)/foreign.c $(SRCDIR)/../../foreign/foreign.c
$(XSRCDIR)/main.c: ../main.@LTO@ $(XFORMDEP) $(XSRCDIR)/main.c: ../main.@LTO@ $(XFORMDEP)
$(XFORM) $(srcdir)/../main.c $(XSRCDIR)/main.c $(XFORM) $(XSRCDIR)/main.c $(srcdir)/../main.c
salloc.@LTO@: $(XSRCDIR)/salloc.c salloc.@LTO@: $(XSRCDIR)/salloc.c
@ -276,7 +277,7 @@ main.@LTO@: $(XSRCDIR)/main.c
gc2.@LTO@: $(srcdir)/gc2.c $(srcdir)/newgc.c $(srcdir)/compact.c $(srcdir)/newgc.c $(srcdir)/gc2.h \ gc2.@LTO@: $(srcdir)/gc2.c $(srcdir)/newgc.c $(srcdir)/compact.c $(srcdir)/newgc.c $(srcdir)/gc2.h \
$(srcdir)/vm_osx.c $(srcdir)/vm_mmap.c $(srcdir)/vm_osk.c $(srcdir)/alloc_cache.c $(srcdir)/my_qsort.c \ $(srcdir)/vm_osx.c $(srcdir)/vm_mmap.c $(srcdir)/vm_osk.c $(srcdir)/alloc_cache.c $(srcdir)/my_qsort.c \
$(srcdir)/../include/scheme.h $(srcdir)/../src/schpriv.h $(srcdir)/weak.c $(srcdir)/../include/scheme.h $(srcdir)/../src/schpriv.h
$(CC) $(CFLAGS) -c $(srcdir)/gc2.c -o gc2.@LTO@ $(CC) $(CFLAGS) -c $(srcdir)/gc2.c -o gc2.@LTO@
FOREIGN_OBJS = ../../foreign/gcc/libffi/src/*.@LTO@ ../../foreign/gcc/libffi/src/*/*.@LTO@ FOREIGN_OBJS = ../../foreign/gcc/libffi/src/*.@LTO@ ../../foreign/gcc/libffi/src/*/*.@LTO@

View File

@ -159,6 +159,22 @@ MzScheme allocates the following kinds of memory objects:
of weak pointers to collectable objects. See GC_malloc_weak_array() of weak pointers to collectable objects. See GC_malloc_weak_array()
in gc2.h for more details. in gc2.h for more details.
* Ephemeron - The object has the following initial structure:
struct {
short tag;
short filler_used_for_hashing;
void *key;
void *val;
}
See "Weak Box" above. The difference for an ephemeron is that
the ephemeron must hold `val' strongly as long as the wealy-held
`key' is accessible --- where `val' itself isn't traced unless
both the ephemeron and `key' are reachable. (In particular,
a reference from `val' to `key' doesn't prevent collection of
`key'.)
* Immobile box - a longword-sized box that can contain a reference to * Immobile box - a longword-sized box that can contain a reference to
a collectable object, but it not itself collectable or movable. An a collectable object, but it not itself collectable or movable. An
immobile box lets MzScheme refer to a collectable object (through immobile box lets MzScheme refer to a collectable object (through

View File

@ -160,6 +160,7 @@ void **GC_variable_stack;
/********************* Type tags *********************/ /********************* Type tags *********************/
Type_Tag weak_box_tag = 42; /* set by client */ Type_Tag weak_box_tag = 42; /* set by client */
Type_Tag ephemeron_tag = 42; /* set by client */
#define gc_weak_array_tag 256 #define gc_weak_array_tag 256
#define gc_on_free_list_tag 257 #define gc_on_free_list_tag 257
@ -466,9 +467,10 @@ void GC_set_stack_base(void *base)
stack_base = (unsigned long)base; stack_base = (unsigned long)base;
} }
void GC_init_type_tags(int count, int weakbox) void GC_init_type_tags(int count, int weakbox, int ephemeron)
{ {
weak_box_tag = weakbox; weak_box_tag = weakbox;
ephemeron_tag = ephemeron;
} }
void GC_register_traversers(Type_Tag tag, Size_Proc size, Mark_Proc mark, Fixup_Proc fixup, void GC_register_traversers(Type_Tag tag, Size_Proc size, Mark_Proc mark, Fixup_Proc fixup,
@ -632,160 +634,9 @@ static int size_on_free_list(void *p)
/* weak arrays and boxes */ /* weak arrays and boxes */
/******************************************************************************/ /******************************************************************************/
/* The GC_Weak_Array structure is not externally visible, but static int is_marked(void *p);
clients expect a specific structure. See README for more
information. */
typedef struct GC_Weak_Array {
Type_Tag type;
short keyex;
long count;
void *replace_val;
struct GC_Weak_Array *next;
void *data[1]; /* must be the 5th longword! */
} GC_Weak_Array;
static GC_Weak_Array *weak_arrays; #include "weak.c"
static int size_weak_array(void *p)
{
GC_Weak_Array *a = (GC_Weak_Array *)p;
return gcBYTES_TO_WORDS(sizeof(GC_Weak_Array)
+ ((a->count - 1) * sizeof(void *)));
}
static int mark_weak_array(void *p)
{
GC_Weak_Array *a = (GC_Weak_Array *)p;
gcMARK(a->replace_val);
a->next = weak_arrays;
weak_arrays = a;
#if CHECKS
/* For now, weak arrays only used for symbols and falses: */
{
void **data;
int i;
data = a->data;
for (i = a->count; i--; ) {
if (data[i]
&& (*(short *)(data[i]) != 45)
&& (*(short *)(data[i]) != 54))
CRASH(1);
}
}
#endif
return gcBYTES_TO_WORDS(sizeof(GC_Weak_Array)
+ ((a->count - 1) * sizeof(void *)));
}
static int fixup_weak_array(void *p)
{
GC_Weak_Array *a = (GC_Weak_Array *)p;
int i;
void **data;
gcFIXUP(a->replace_val);
data = a->data;
for (i = a->count; i--; ) {
if (data[i])
gcFIXUP(data[i]);
}
return gcBYTES_TO_WORDS(sizeof(GC_Weak_Array)
+ ((a->count - 1) * sizeof(void *)));
}
void *GC_malloc_weak_array(size_t size_in_bytes, void *replace_val)
{
GC_Weak_Array *w;
/* Allcation might trigger GC, so we use park: */
park[0] = replace_val;
w = (GC_Weak_Array *)GC_malloc_one_tagged(size_in_bytes
+ sizeof(GC_Weak_Array)
- sizeof(void *));
replace_val = park[0];
park[0] = NULL;
w->type = gc_weak_array_tag;
w->replace_val = replace_val;
w->count = (size_in_bytes >> LOG_WORD_SIZE);
return w;
}
/* The GC_Weak_Box struct is not externally visible, but
first three fields are mandated by the GC interface */
typedef struct GC_Weak_Box {
Type_Tag type;
short keyex;
void *val;
/* The rest is up to us: */
void **secondary_erase;
int soffset;
struct GC_Weak_Box *next;
} GC_Weak_Box;
static GC_Weak_Box *weak_boxes;
static int size_weak_box(void *p)
{
return gcBYTES_TO_WORDS(sizeof(GC_Weak_Box));
}
static int mark_weak_box(void *p)
{
GC_Weak_Box *wb = (GC_Weak_Box *)p;
gcMARK(wb->secondary_erase);
if (wb->val) {
wb->next = weak_boxes;
weak_boxes = wb;
}
return gcBYTES_TO_WORDS(sizeof(GC_Weak_Box));
}
static int fixup_weak_box(void *p)
{
GC_Weak_Box *wb = (GC_Weak_Box *)p;
gcFIXUP(wb->secondary_erase);
gcFIXUP(wb->val);
return gcBYTES_TO_WORDS(sizeof(GC_Weak_Box));
}
void *GC_malloc_weak_box(void *p, void **secondary, int soffset)
{
GC_Weak_Box *w;
/* Allcation might trigger GC, so we use park: */
park[0] = p;
park[1] = secondary;
w = (GC_Weak_Box *)GC_malloc_one_tagged(sizeof(GC_Weak_Box));
p = park[0];
park[0] = NULL;
secondary = (void **)park[1];
park[1] = NULL;
w->type = weak_box_tag;
w->val = p;
w->secondary_erase = secondary;
w->soffset = soffset;
return w;
}
/******************************************************************************/ /******************************************************************************/
/* finalization */ /* finalization */
@ -1037,7 +888,9 @@ static int is_marked(void *p)
offset -= 1; offset -= 1;
return OFFSET_COLOR(page->u.offsets, offset); return OFFSET_COLOR(page->u.offsets, offset);
} else } else if ((long)p & 0x1)
return 1;
else
return 0; return 0;
} }
} }
@ -3165,6 +3018,7 @@ static void check_ptr(void **a)
if ((tag < 0) || (tag >= _num_tags_) if ((tag < 0) || (tag >= _num_tags_)
|| (!size_table[tag] || (!size_table[tag]
&& (tag != weak_box_tag) && (tag != weak_box_tag)
&& (tag != ephemeron_tag)
&& (tag != gc_weak_array_tag) && (tag != gc_weak_array_tag)
&& (tag != gc_on_free_list_tag))) { && (tag != gc_on_free_list_tag))) {
GCPRINT(GCOUTF, "bad tag: %d at %lx, references from %lx\n", tag, (long)p, (long)a); GCPRINT(GCOUTF, "bad tag: %d at %lx, references from %lx\n", tag, (long)p, (long)a);
@ -3261,6 +3115,7 @@ static void init(void)
{ {
if (!initialized) { if (!initialized) {
GC_register_traversers(weak_box_tag, size_weak_box, mark_weak_box, fixup_weak_box, 1, 0); GC_register_traversers(weak_box_tag, size_weak_box, mark_weak_box, fixup_weak_box, 1, 0);
GC_register_traversers(ephemeron_tag, size_ephemeron, mark_ephemeron, fixup_ephemeron, 1, 0);
GC_register_traversers(gc_weak_array_tag, size_weak_array, mark_weak_array, fixup_weak_array, 0, 0); GC_register_traversers(gc_weak_array_tag, size_weak_array, mark_weak_array, fixup_weak_array, 0, 0);
#if USE_FREELIST #if USE_FREELIST
GC_register_traversers(gc_on_free_list_tag, size_on_free_list, size_on_free_list, size_on_free_list, 0, 0); GC_register_traversers(gc_on_free_list_tag, size_on_free_list, size_on_free_list, size_on_free_list, 0, 0);
@ -3363,8 +3218,6 @@ static void do_roots(int fixup)
static void gcollect(int full) static void gcollect(int full)
{ {
int did_fnls; int did_fnls;
GC_Weak_Box *wb;
GC_Weak_Array *wa;
#if TIME #if TIME
struct rusage pre, post; struct rusage pre, post;
#endif #endif
@ -3383,8 +3236,10 @@ static void gcollect(int full)
set_ending_tags(); set_ending_tags();
weak_boxes = NULL; init_weak_boxes();
weak_arrays = NULL; init_ephemerons();
init_weak_arrays();
did_fnls = 0; did_fnls = 0;
gray_first = NULL; gray_first = NULL;
@ -3520,6 +3375,10 @@ static void gcollect(int full)
iterations = 0; iterations = 0;
/* Propagate, mark ready ephemerons */
propagate_all_mpages();
mark_ready_ephemerons();
/* Propagate, loop to do finalization */ /* Propagate, loop to do finalization */
while (1) { while (1) {
@ -3685,11 +3544,12 @@ static void gcollect(int full)
gcMARK(f->p); gcMARK(f->p);
f = f->next; f = f->next;
} }
mark_ready_ephemerons();
} }
did_fnls++; did_fnls++;
} }
} }
#if CHECKS #if CHECKS
@ -3722,33 +3582,9 @@ static void gcollect(int full)
/******************************************************/ /******************************************************/
/* Do weak boxes: */ zero_remaining_ephemerons();
wb = weak_boxes; zero_weak_boxes();
while (wb) { zero_weak_arrays();
if (!is_marked(wb->val)) {
wb->val = NULL;
if (wb->secondary_erase) {
*(wb->secondary_erase + wb->soffset) = NULL;
wb->secondary_erase = NULL;
}
}
wb = wb->next;
}
/* Do weak arrays: */
wa = weak_arrays;
while (wa) {
void **data;
data = wa->data;
for (i = wa->count; i--; ) {
void *p = data[i];
if (p && !is_marked(p))
data[i] = wa->replace_val;
}
wa = wa->next;
}
/* Cleanup weak finalization links: */ /* Cleanup weak finalization links: */
{ {
@ -4648,11 +4484,13 @@ static long dump_info_array[BIGBLOCK_MIN_SIZE];
#if KEEP_BACKPOINTERS #if KEEP_BACKPOINTERS
# define MAX_FOUND_OBJECTS 5000 # define MAX_FOUND_OBJECTS 5000
int GC_show_trace = 0; int GC_show_trace = 0;
int GC_show_finals = 0;
int GC_trace_for_tag = 57; int GC_trace_for_tag = 57;
int GC_path_length_limit = 1000; int GC_path_length_limit = 1000;
static int found_object_count; static int found_object_count;
static void *found_objects[MAX_FOUND_OBJECTS]; static void *found_objects[MAX_FOUND_OBJECTS];
void (*GC_for_each_found)(void *p) = NULL; void (*GC_for_each_found)(void *p) = NULL;
char *(*GC_get_xtagged_name)(void *p) = NULL;
#endif #endif
static long scan_tagged_mpage(void **p, MPage *page) static long scan_tagged_mpage(void **p, MPage *page)
@ -4773,6 +4611,9 @@ void *print_out_pointer(const char *prefix, void *p)
} else if (page->type == MTYPE_ATOMIC) { } else if (page->type == MTYPE_ATOMIC) {
what = "ATOMIC"; what = "ATOMIC";
} else if (page->type == MTYPE_XTAGGED) { } else if (page->type == MTYPE_XTAGGED) {
if (GC_get_xtagged_name)
what = GC_get_xtagged_name(p);
else
what = "XTAGGED"; what = "XTAGGED";
} else if (page->type == MTYPE_MALLOCFREE) { } else if (page->type == MTYPE_MALLOCFREE) {
what = "MALLOCED"; what = "MALLOCED";
@ -5065,6 +4906,16 @@ void GC_dump(void)
GC_trace_for_tag = 57; GC_trace_for_tag = 57;
--avoid_collection; --avoid_collection;
} }
if (GC_show_finals) {
Fnl *f;
avoid_collection++;
GCPRINT(GCOUTF, "Begin Finalizations\n");
for (f = fnls; f; f = f->next) {
print_out_pointer("==@ ", f->p);
}
GCPRINT(GCOUTF, "End Finalizations\n");
--avoid_collection;
}
if (GC_for_each_found) if (GC_for_each_found)
avoid_collection++; avoid_collection++;
#endif #endif

View File

@ -64,13 +64,14 @@ GC2_EXTERN void GC_add_roots(void *start, void *end);
Called by MzScheme to install roots. The memory between Called by MzScheme to install roots. The memory between
`start' (inclusive) and `end' (exclusive) contains pointers. */ `start' (inclusive) and `end' (exclusive) contains pointers. */
GC2_EXTERN void GC_init_type_tags(int count, int weakbox); GC2_EXTERN void GC_init_type_tags(int count, int weakbox, int ephemeron);
/* /*
Called by MzScheme to indicate the number of different type tags it Called by MzScheme to indicate the number of different type tags it
uses, starting from 0. `count' is always less than 256. The weakbox uses, starting from 0. `count' is always less than 256. The weakbox
argument is the value to be used for tagging weak box. (The GC has argument is the value to be used for tagging weak box, and the
some freedom in the layout of a weak box, so it performs weak box ephemeron is the value to tagging an ephemeron. (The GC has some
traversals itself, but MzScheme gets to choose the tag.) */ freedom in the layout of a weak box or ephemeron, so it performs weak
box traversals itself, but MzScheme gets to choose the tag.) */
GC2_EXTERN void GC_register_thread(void *, void *); GC2_EXTERN void GC_register_thread(void *, void *);
/* /*
@ -177,6 +178,10 @@ GC2_EXTERN void *GC_malloc_weak_box(void *p, void **secondary, int soffset);
/* /*
Allocate a weak box. See README for details. */ Allocate a weak box. See README for details. */
GC2_EXTERN void *GC_malloc_ephemeron(void *p, void *p2);
/*
Allocate an ephemeron. See README for details. */
GC2_EXTERN void **GC_malloc_immobile_box(void *p); GC2_EXTERN void **GC_malloc_immobile_box(void *p);
GC2_EXTERN void GC_free_immobile_box(void **b); GC2_EXTERN void GC_free_immobile_box(void **b);
/* /*

View File

@ -1074,153 +1074,15 @@ inline static void reset_weak_finalizers(void)
/*****************************************************************************/ /*****************************************************************************/
/* weak boxes and arrays */ /* weak boxes and arrays */
/*****************************************************************************/ /*****************************************************************************/
struct weak_box {
unsigned short type;
short keyex;
void *val;
void **secondary_erase;
int soffset;
struct weak_box *next;
};
static const unsigned short gc_weak_array_tag = 256;
static unsigned short weak_box_tag; static unsigned short weak_box_tag;
static struct weak_box *weak_boxes = NULL; static unsigned short ephemeron_tag;
void *GC_malloc_weak_box(void *p, void **secondary, int soffset) #define is_marked(p) marked(p)
{ typedef short Type_Tag;
struct weak_box *wb;
park[0] = p; park[1] = secondary; #include "weak.c"
wb = GC_malloc_one_tagged(sizeof(struct weak_box));
p = park[0]; secondary = park[1]; park[0] = park[1] = NULL;
wb->type = weak_box_tag; wb->val = p;
wb->secondary_erase = secondary; wb->soffset = soffset;
return wb;
}
inline static int size_weak_box(void *p)
{
return gcBYTES_TO_WORDS(sizeof(struct weak_box));
}
static int mark_weak_box(void *p)
{
struct weak_box *wb = (struct weak_box *)p;
gcMARK(wb->secondary_erase);
wb->next = weak_boxes;
weak_boxes = wb;
if(!gc_full) gcMARK(wb->val);
return size_weak_box(p);
}
static int repair_weak_box(void *p)
{
struct weak_box *wb = (struct weak_box *)p;
gcFIXUP(wb->secondary_erase);
return size_weak_box(p);
}
inline static void clean_up_weak_boxes(void)
{
struct weak_box *work;
gcFIXUP(weak_boxes);
for(work = weak_boxes; work; work = work->next) {
if(!marked(work->val)) {
work->val = NULL;
if(work->secondary_erase)
*(work->secondary_erase + work->soffset) = NULL;
work->secondary_erase = NULL;
} else {
work->val = GC_resolve(work->val);
}
gcFIXUP(work->next);
}
weak_boxes = NULL;
}
struct weak_array {
unsigned short type;
short keyex;
long count;
void *replace_val;
struct weak_array *next;
void *data[1];
};
static unsigned short weak_array_tag = 256;
static struct weak_array *weak_arrays = NULL;
void *GC_malloc_weak_array(size_t size, void *replace_val)
{
struct weak_array *wa;
park[0] = replace_val;
wa = GC_malloc_one_tagged(size + sizeof(struct weak_array) - sizeof(void*));
replace_val = park[0]; park[0] = NULL;
wa->type = weak_array_tag;
wa->replace_val = replace_val;
wa->count = gcBYTES_TO_WORDS(size);
return wa;
}
inline static int size_weak_array(void *p)
{
return gcBYTES_TO_WORDS(sizeof(struct weak_array)
+ ((((struct weak_array *)p)->count - 1)
* sizeof(void*)));
}
static int mark_weak_array(void *p)
{
struct weak_array *wa = (struct weak_array *)p;
gcMARK(wa->replace_val);
wa->next = weak_arrays;
weak_arrays = wa;
return size_weak_array(p);
}
static int repair_weak_array(void *p)
{
struct weak_array *wa = (struct weak_array *)p;
gcFIXUP(wa->replace_val);
return size_weak_array(p);
}
inline static void clean_up_weak_arrays()
{
struct weak_array *work;
gcFIXUP(weak_arrays);
for(work = weak_arrays; work; work = work->next) {
void **data;
int i;
for(data = work->data, i = work->count; i--; ) {
void *p = data[i];
if(p) {
if(!marked(p)) {
GCDEBUG((DEBUGOUTF, "Replacing %p in %p because marked is %i (%p/%i)\n",
p, work, marked(p), find_page(p), find_page(p)->previous_size));
data[i] = work->replace_val;
} else {
data[i] = GC_resolve(p);
}
}
}
gcFIXUP(work->next);
}
weak_arrays = NULL;
}
/*****************************************************************************/ /*****************************************************************************/
/* thread list */ /* thread list */
@ -1835,11 +1697,13 @@ void designate_modified(void *p)
#include "sighand.c" #include "sighand.c"
void GC_init_type_tags(int count, int weakbox) void GC_init_type_tags(int count, int weakbox, int ephemeron)
{ {
static int initialized = 0; static int initialized = 0;
weak_box_tag = weakbox; weak_box_tag = weakbox;
ephemeron_tag = ephemeron;
if(!initialized) { if(!initialized) {
initialized = 1; initialized = 1;
max_heap_size = determine_max_heap_size(); max_heap_size = determine_max_heap_size();
@ -1848,10 +1712,12 @@ void GC_init_type_tags(int count, int weakbox)
resize_gen0(INIT_GEN0_SIZE); resize_gen0(INIT_GEN0_SIZE);
GC_register_traversers(weakbox, size_weak_box, mark_weak_box, GC_register_traversers(weak_box_tag, size_weak_box, mark_weak_box,
repair_weak_box, 0, 0); fixup_weak_box, 0, 0);
GC_register_traversers(weak_array_tag, size_weak_array, mark_weak_array, GC_register_traversers(ephemeron_tag, size_ephemeron, mark_ephemeron,
repair_weak_array, 0, 0); fixup_ephemeron, 0, 0);
GC_register_traversers(gc_weak_array_tag, size_weak_array, mark_weak_array,
fixup_weak_array, 0, 0);
initialize_signal_handler(); initialize_signal_handler();
} }
} }
@ -2188,8 +2054,9 @@ static void prepare_pages_for_collection(void)
} }
/* we do this here because, well, why not? */ /* we do this here because, well, why not? */
weak_boxes = NULL; init_weak_boxes();
weak_arrays = NULL; init_weak_arrays();
init_ephemerons();
} }
static void mark_backpointers(void) static void mark_backpointers(void)
@ -2545,9 +2412,9 @@ static void garbage_collect(int force_full)
/* now propagate/repair the marks we got from these roots, and do the /* now propagate/repair the marks we got from these roots, and do the
finalizer passes */ finalizer passes */
propagate_marks(); mark_ready_ephemerons(); propagate_marks();
check_finalizers(1); propagate_marks(); check_finalizers(1); mark_ready_ephemerons(); propagate_marks();
check_finalizers(2); propagate_marks(); check_finalizers(2); mark_ready_ephemerons(); propagate_marks();
if(gc_full) zero_weak_finalizers(); if(gc_full) zero_weak_finalizers();
do_ordered_level3(); propagate_marks(); do_ordered_level3(); propagate_marks();
check_finalizers(3); propagate_marks(); check_finalizers(3); propagate_marks();
@ -2564,13 +2431,15 @@ static void garbage_collect(int force_full)
clear_stack_pages(); clear_stack_pages();
#endif #endif
zero_weak_boxes();
zero_weak_arrays();
zero_remaining_ephemerons();
if(gc_full) do_heap_compact(); if(gc_full) do_heap_compact();
/* do some cleanup structures that either change state based on the /* do some cleanup structures that either change state based on the
heap state after collection or that become useless based on changes heap state after collection or that become useless based on changes
in state after collection */ in state after collection */
clean_up_weak_boxes();
clean_up_weak_arrays();
clean_up_thread_list(); clean_up_thread_list();
clean_up_owner_table(); clean_up_owner_table();
clean_up_account_hooks(); clean_up_account_hooks();

326
src/mzscheme/gc2/weak.c Normal file
View File

@ -0,0 +1,326 @@
/*
Provides:
GC_malloc_weak_array
size_weak_array, mark_weak_array, fixup_weak_array
init_weak_arrays zero_weak_arrays
GC_malloc_weak_box
size_weak_box, mark_weak_box, fixup_weak_box
init_weak_boxes zero_weak_boxes
GC_malloc_ephemeron
size_ephemeron, mark_ephemeron, fixup_ephemeron
init_ephemerons mark_ready_ephemerons zero_remaining_ephemerons
Requires:
gc_weak_array_tag
weak_box_tag
ephemeron_tag
is_marked(p)
Type_Tag
*/
/******************************************************************************/
/* weak arrays */
/******************************************************************************/
/* The GC_Weak_Array structure is not externally visible, but
clients expect a specific structure. See README for more
information. */
typedef struct GC_Weak_Array {
Type_Tag type;
short keyex;
long count;
void *replace_val;
struct GC_Weak_Array *next;
void *data[1]; /* must be the 5th longword! */
} GC_Weak_Array;
static GC_Weak_Array *weak_arrays;
static int size_weak_array(void *p)
{
GC_Weak_Array *a = (GC_Weak_Array *)p;
return gcBYTES_TO_WORDS(sizeof(GC_Weak_Array)
+ ((a->count - 1) * sizeof(void *)));
}
static int mark_weak_array(void *p)
{
GC_Weak_Array *a = (GC_Weak_Array *)p;
gcMARK(a->replace_val);
a->next = weak_arrays;
weak_arrays = a;
#if CHECKS
/* For now, weak arrays only used for symbols and falses: */
{
void **data;
int i;
data = a->data;
for (i = a->count; i--; ) {
if (data[i]
&& (*(short *)(data[i]) != 45)
&& (*(short *)(data[i]) != 54))
CRASH(1);
}
}
#endif
return gcBYTES_TO_WORDS(sizeof(GC_Weak_Array)
+ ((a->count - 1) * sizeof(void *)));
}
static int fixup_weak_array(void *p)
{
GC_Weak_Array *a = (GC_Weak_Array *)p;
int i;
void **data;
gcFIXUP(a->replace_val);
data = a->data;
for (i = a->count; i--; ) {
if (data[i])
gcFIXUP(data[i]);
}
return gcBYTES_TO_WORDS(sizeof(GC_Weak_Array)
+ ((a->count - 1) * sizeof(void *)));
}
void *GC_malloc_weak_array(size_t size_in_bytes, void *replace_val)
{
GC_Weak_Array *w;
/* Allcation might trigger GC, so we use park: */
park[0] = replace_val;
w = (GC_Weak_Array *)GC_malloc_one_tagged(size_in_bytes
+ sizeof(GC_Weak_Array)
- sizeof(void *));
replace_val = park[0];
park[0] = NULL;
w->type = gc_weak_array_tag;
w->replace_val = replace_val;
w->count = (size_in_bytes >> LOG_WORD_SIZE);
return w;
}
void init_weak_arrays() {
weak_arrays = NULL;
}
static void zero_weak_arrays()
{
GC_Weak_Array *wa;
int i;
wa = weak_arrays;
while (wa) {
void **data;
data = wa->data;
for (i = wa->count; i--; ) {
void *p = data[i];
if (p && !is_marked(p))
data[i] = wa->replace_val;
}
wa = wa->next;
}
}
/******************************************************************************/
/* weak boxes */
/******************************************************************************/
/* The GC_Weak_Box struct is not externally visible, but
first three fields are mandated by the GC interface */
typedef struct GC_Weak_Box {
Type_Tag type;
short keyex;
void *val;
/* The rest is up to us: */
void **secondary_erase;
int soffset;
struct GC_Weak_Box *next;
} GC_Weak_Box;
static GC_Weak_Box *weak_boxes;
static int size_weak_box(void *p)
{
return gcBYTES_TO_WORDS(sizeof(GC_Weak_Box));
}
static int mark_weak_box(void *p)
{
GC_Weak_Box *wb = (GC_Weak_Box *)p;
gcMARK(wb->secondary_erase);
if (wb->val) {
wb->next = weak_boxes;
weak_boxes = wb;
}
return gcBYTES_TO_WORDS(sizeof(GC_Weak_Box));
}
static int fixup_weak_box(void *p)
{
GC_Weak_Box *wb = (GC_Weak_Box *)p;
gcFIXUP(wb->secondary_erase);
gcFIXUP(wb->val);
return gcBYTES_TO_WORDS(sizeof(GC_Weak_Box));
}
void *GC_malloc_weak_box(void *p, void **secondary, int soffset)
{
GC_Weak_Box *w;
/* Allcation might trigger GC, so we use park: */
park[0] = p;
park[1] = secondary;
w = (GC_Weak_Box *)GC_malloc_one_tagged(sizeof(GC_Weak_Box));
p = park[0];
park[0] = NULL;
secondary = (void **)park[1];
park[1] = NULL;
w->type = weak_box_tag;
w->val = p;
w->secondary_erase = secondary;
w->soffset = soffset;
return w;
}
void init_weak_boxes() {
weak_boxes = NULL;
}
static void zero_weak_boxes()
{
GC_Weak_Box *wb;
wb = weak_boxes;
while (wb) {
if (!is_marked(wb->val)) {
wb->val = NULL;
if (wb->secondary_erase) {
*(wb->secondary_erase + wb->soffset) = NULL;
wb->secondary_erase = NULL;
}
}
wb = wb->next;
}
}
/******************************************************************************/
/* ephemeron */
/******************************************************************************/
/* The GC_Ephemeron struct is not externally visible, but
first three fields are mandated by the GC interface */
typedef struct GC_Ephemeron {
Type_Tag type;
short keyex;
void *key;
void *val;
/* The rest is up to us: */
struct GC_Ephemeron *next;
} GC_Ephemeron;
static GC_Ephemeron *ephemerons;
static int size_ephemeron(void *p)
{
return gcBYTES_TO_WORDS(sizeof(GC_Ephemeron));
}
static int mark_ephemeron(void *p)
{
GC_Ephemeron *eph = (GC_Ephemeron *)p;
if (eph->val) {
eph->next = ephemerons;
ephemerons = eph;
}
return gcBYTES_TO_WORDS(sizeof(GC_Ephemeron));
}
static int fixup_ephemeron(void *p)
{
GC_Ephemeron *eph = (GC_Ephemeron *)p;
gcFIXUP(eph->key);
gcFIXUP(eph->val);
return gcBYTES_TO_WORDS(sizeof(GC_Ephemeron));
}
void *GC_malloc_ephemeron(void *k, void *v)
{
GC_Ephemeron *eph;
/* Allcation might trigger GC, so we use park: */
park[0] = k;
park[1] = v;
eph = (GC_Ephemeron *)GC_malloc_one_tagged(sizeof(GC_Ephemeron));
k = park[0];
park[0] = NULL;
v = park[1];
park[1] = NULL;
eph->type = ephemeron_tag;
eph->key = k;
eph->val = v;
return eph;
}
void init_ephemerons() {
ephemerons = NULL;
}
static void mark_ready_ephemerons()
{
GC_Ephemeron *waiting = NULL, *next, *eph;
for (eph = ephemerons; eph; eph = next) {
next = eph->next;
if (is_marked(eph->key)) {
gcMARK(eph->val);
} else {
eph->next = waiting;
waiting = eph;
}
}
ephemerons = waiting;
}
static void zero_remaining_ephemerons()
{
GC_Ephemeron *eph;
/* After unordered finalization, any remaining ephemerons
should be zeroed. */
for (eph = ephemerons; eph; eph = eph->next) {
eph->key = NULL;
eph->val = NULL;
}
}

File diff suppressed because it is too large Load Diff

View File

@ -429,6 +429,8 @@ scheme_make_exact_char_symbol
scheme_symbol_name scheme_symbol_name
scheme_symbol_name_and_size scheme_symbol_name_and_size
scheme_symbol_val scheme_symbol_val
scheme_intern_exact_keyword
scheme_intern_exact_char_keyword
scheme_make_struct_values scheme_make_struct_values
scheme_make_struct_names scheme_make_struct_names
scheme_make_struct_type scheme_make_struct_type
@ -466,6 +468,8 @@ scheme_box
scheme_unbox scheme_unbox
scheme_set_box scheme_set_box
scheme_make_weak_box scheme_make_weak_box
scheme_make_ephemeron
scheme_ephemeron_value
scheme_load scheme_load
scheme_load_extension scheme_load_extension
scheme_register_extension_global scheme_register_extension_global

View File

@ -436,6 +436,8 @@ scheme_make_exact_char_symbol
scheme_symbol_name scheme_symbol_name
scheme_symbol_name_and_size scheme_symbol_name_and_size
scheme_symbol_val scheme_symbol_val
scheme_intern_exact_keyword
scheme_intern_exact_char_keyword
scheme_make_struct_values scheme_make_struct_values
scheme_make_struct_names scheme_make_struct_names
scheme_make_struct_type scheme_make_struct_type
@ -474,6 +476,8 @@ scheme_box
scheme_unbox scheme_unbox
scheme_set_box scheme_set_box
scheme_make_weak_box scheme_make_weak_box
scheme_make_ephemeron
scheme_ephemeron_value
scheme_load scheme_load
scheme_load_extension scheme_load_extension
scheme_register_extension_global scheme_register_extension_global

View File

@ -421,6 +421,8 @@ EXPORTS
scheme_symbol_name scheme_symbol_name
scheme_symbol_name_and_size scheme_symbol_name_and_size
scheme_symbol_val scheme_symbol_val
scheme_intern_exact_keyword
scheme_intern_exact_char_keyword
scheme_make_struct_values scheme_make_struct_values
scheme_make_struct_names scheme_make_struct_names
scheme_make_struct_type scheme_make_struct_type
@ -458,6 +460,8 @@ EXPORTS
scheme_unbox scheme_unbox
scheme_set_box scheme_set_box
scheme_make_weak_box scheme_make_weak_box
scheme_make_ephemeron
scheme_ephemeron_value
scheme_load scheme_load
scheme_load_extension scheme_load_extension
scheme_register_extension_global scheme_register_extension_global

View File

@ -386,6 +386,7 @@ typedef void (*Scheme_Type_Printer)(Scheme_Object *v, int for_display, Scheme_Pr
#define SCHEME_PATH_STRING_STR "path or string" #define SCHEME_PATH_STRING_STR "path or string"
#define SCHEME_SYMBOLP(obj) SAME_TYPE(SCHEME_TYPE(obj), scheme_symbol_type) #define SCHEME_SYMBOLP(obj) SAME_TYPE(SCHEME_TYPE(obj), scheme_symbol_type)
#define SCHEME_KEYWORDP(obj) SAME_TYPE(SCHEME_TYPE(obj), scheme_keyword_type)
#define SCHEME_STRSYMP(obj) (SCHEME_CHAR_STRINGP(obj) || SCHEME_SYMBOLP(obj)) #define SCHEME_STRSYMP(obj) (SCHEME_CHAR_STRINGP(obj) || SCHEME_SYMBOLP(obj))
@ -478,6 +479,8 @@ typedef void (*Scheme_Type_Printer)(Scheme_Object *v, int for_display, Scheme_Pr
#define SCHEME_PATH_LEN(obj) (((Scheme_Simple_Object *)(obj))->u.byte_str_val.tag_val) #define SCHEME_PATH_LEN(obj) (((Scheme_Simple_Object *)(obj))->u.byte_str_val.tag_val)
#define SCHEME_SYM_VAL(obj) (((Scheme_Symbol *)((Scheme_Simple_Object *)(obj)))->s) #define SCHEME_SYM_VAL(obj) (((Scheme_Symbol *)((Scheme_Simple_Object *)(obj)))->s)
#define SCHEME_SYM_LEN(obj) (((Scheme_Symbol *)((Scheme_Simple_Object *)(obj)))->len) #define SCHEME_SYM_LEN(obj) (((Scheme_Symbol *)((Scheme_Simple_Object *)(obj)))->len)
#define SCHEME_KEYWORD_VAL(obj) SCHEME_SYM_VAL(obj)
#define SCHEME_KEYWORD_LEN(obj) SCHEME_SYM_LEN(obj)
#define SCHEME_SYMSTR_OFFSET(obj) ((unsigned long)SCHEME_SYM_VAL(obj)-(unsigned long)(obj)) #define SCHEME_SYMSTR_OFFSET(obj) ((unsigned long)SCHEME_SYM_VAL(obj)-(unsigned long)(obj))
@ -1546,6 +1549,8 @@ extern Scheme_Extension_Table *scheme_extension_table;
#define SCHEME_SNF_PIPE_QUOTE 0x2 #define SCHEME_SNF_PIPE_QUOTE 0x2
#define SCHEME_SNF_NO_PIPE_QUOTE 0x4 #define SCHEME_SNF_NO_PIPE_QUOTE 0x4
#define SCHEME_SNF_NEED_CASE 0x8 #define SCHEME_SNF_NEED_CASE 0x8
#define SCHEME_SNF_KEYWORD 0x10
#define SCHEME_SNF_NO_KEYWORDS 0x20
/* For use with scheme_make_struct_values et al.: */ /* For use with scheme_make_struct_values et al.: */
#define SCHEME_STRUCT_NO_TYPE 0x01 #define SCHEME_STRUCT_NO_TYPE 0x01

View File

@ -236,7 +236,7 @@ int MAIN(int argc, MAIN_char **MAIN_argv)
#if defined(MZ_PRECISE_GC) #if defined(MZ_PRECISE_GC)
stack_start = (void *)&__gc_var_stack__; stack_start = (void *)&__gc_var_stack__;
GC_init_type_tags(_scheme_last_type_, scheme_weak_box_type); GC_init_type_tags(_scheme_last_type_, scheme_weak_box_type, scheme_ephemeron_type);
#endif #endif
scheme_set_stack_base(stack_start, 1); scheme_set_stack_base(stack_start, 1);

File diff suppressed because it is too large Load Diff

View File

@ -787,6 +787,7 @@ void scheme_init_hash_key_procs(void)
PROC(scheme_byte_string_type, hash_general); PROC(scheme_byte_string_type, hash_general);
PROC(scheme_path_type, hash_general); PROC(scheme_path_type, hash_general);
PROC(scheme_symbol_type, hash_symbol); PROC(scheme_symbol_type, hash_symbol);
PROC(scheme_keyword_type, hash_symbol);
PROC(scheme_null_type, hash_addr); PROC(scheme_null_type, hash_addr);
PROC(scheme_pair_type, hash_general); PROC(scheme_pair_type, hash_general);
PROC(scheme_wrap_chunk_type, hash_general); PROC(scheme_wrap_chunk_type, hash_general);
@ -816,6 +817,7 @@ void scheme_init_hash_key_procs(void)
PROC(scheme_module_registry_type, hash_general); PROC(scheme_module_registry_type, hash_general);
PROC(scheme_bucket_table_type, hash_general); PROC(scheme_bucket_table_type, hash_general);
PROC(scheme_weak_box_type, hash_general); PROC(scheme_weak_box_type, hash_general);
PROC(scheme_ephemeron_type, hash_general);
PROC(scheme_struct_type_type, hash_general); PROC(scheme_struct_type_type, hash_general);
PROC(scheme_set_macro_type, hash_general); PROC(scheme_set_macro_type, hash_general);
PROC(scheme_id_macro_type, hash_general); PROC(scheme_id_macro_type, hash_general);
@ -1090,6 +1092,7 @@ long scheme_equal_hash_key(Scheme_Object *o)
return k; return k;
} }
# ifndef MZ_PRECISE_GC # ifndef MZ_PRECISE_GC
case scheme_keyword_type:
case scheme_symbol_type: case scheme_symbol_type:
{ {
Scheme_Symbol *s = (Scheme_Symbol *)o; Scheme_Symbol *s = (Scheme_Symbol *)o;

View File

@ -108,6 +108,10 @@ static Scheme_Object *make_weak_box(int argc, Scheme_Object *argv[]);
static Scheme_Object *weak_box_value(int argc, Scheme_Object *argv[]); static Scheme_Object *weak_box_value(int argc, Scheme_Object *argv[]);
static Scheme_Object *weak_boxp(int argc, Scheme_Object *argv[]); static Scheme_Object *weak_boxp(int argc, Scheme_Object *argv[]);
static Scheme_Object *make_ephemeron(int argc, Scheme_Object *argv[]);
static Scheme_Object *ephemeron_value(int argc, Scheme_Object *argv[]);
static Scheme_Object *ephemeronp(int argc, Scheme_Object *argv[]);
#define BOX "box" #define BOX "box"
#define BOXP "box?" #define BOXP "box?"
#define UNBOX "unbox" #define UNBOX "unbox"
@ -503,6 +507,22 @@ scheme_init_list (Scheme_Env *env)
1, 1, 1), 1, 1, 1),
env); env);
scheme_add_global_constant("make-ephemeron",
scheme_make_prim_w_arity(make_ephemeron,
"make-ephemeron",
2, 2),
env);
scheme_add_global_constant("ephemeron-value",
scheme_make_prim_w_arity(ephemeron_value,
"ephemeron-value",
1, 1),
env);
scheme_add_global_constant("ephemeron?",
scheme_make_folding_prim(ephemeronp,
"ephemeron?",
1, 1, 1),
env);
REGISTER_SO(weak_symbol); REGISTER_SO(weak_symbol);
REGISTER_SO(equal_symbol); REGISTER_SO(equal_symbol);
@ -1698,3 +1718,183 @@ Scheme_Object * scheme_make_null (void)
{ {
return scheme_null; return scheme_null;
} }
/************************************************************/
/* ephemerons */
/************************************************************/
typedef struct Scheme_Ephemeron {
Scheme_Object so;
Scheme_Object *key, *val;
struct Scheme_Ephemeron *next;
} Scheme_Ephemeron;
#ifndef MZ_PRECISE_GC
static Scheme_Ephemeron *ephemerons, *done_ephemerons; /* not registered as a root! */
#ifdef USE_SENORA_GC
# define GC_is_marked(p) GC_base(p)
# define GC_did_mark_stack_overflow() 0
#else
extern MZ_DLLIMPORT int GC_is_marked(void *);
extern MZ_DLLIMPORT int GC_did_mark_stack_overflow(void);
#endif
extern MZ_DLLIMPORT void GC_push_all_stack(void *, void *);
extern MZ_DLLIMPORT void GC_flush_mark_stack(void);
#endif
Scheme_Object *scheme_make_ephemeron(Scheme_Object *key, Scheme_Object *val)
{
#ifdef MZ_PRECISE_GC
return GC_malloc_ephemeron(key, val);
#else
Scheme_Ephemeron *e;
e = (Scheme_Ephemeron *)scheme_malloc_atomic(sizeof(Scheme_Ephemeron));
e->so.type = scheme_ephemeron_type;
e->next = ephemerons;
ephemerons = e;
e->key = key;
e->val = val;
return (Scheme_Object *)e;
#endif
}
Scheme_Object *scheme_ephemeron_value(Scheme_Object *o)
{
return ((Scheme_Ephemeron *)o)->val;
}
#ifndef MZ_PRECISE_GC
static void set_ephemerons(Scheme_Ephemeron *ae, Scheme_Ephemeron *be, Scheme_Ephemeron *ce, Scheme_Ephemeron *de)
{
if (be) {
Scheme_Ephemeron *e;
for (e = be; e->next; e = e->next) { }
be->next = ae;
ae = be;
}
if (ce)
set_ephemerons(ae, ce, de, NULL);
else if (de)
set_ephemerons(ae, de, NULL, NULL);
else
ephemerons = ae;
}
static int mark_ephemerons()
{
Scheme_Ephemeron *e, *ae, *be, *next;
int did_one, mix, ever_done = 0;
mix = scheme_get_milliseconds();
mix = mix >> 8;
do {
did_one = 0;
ae = be = NULL;
for (e = ephemerons; e; e = next) {
next = e->next;
if (e->key) {
if (!GC_is_marked(e)
|| (!SCHEME_INTP(e->key) && !GC_is_marked(e->key))) {
/* No reason to mark, yet. Randomly put this one back
into one of the keep lists: */
if (mix & 0x1) {
e->next = ae;
ae = e;
} else {
e->next = be;
be = e;
}
mix += ((long)e >> 5) + ((long)e >> 2);
} else {
did_one = 1;
ever_done = 1;
GC_push_all_stack(&e->val, &e->val + 1);
if (GC_did_mark_stack_overflow()) {
/* printf("mark stack overflow\n"); */
set_ephemerons(ae, be, done_ephemerons, e);
return 0;
} else {
GC_flush_mark_stack();
if (GC_did_mark_stack_overflow()) {
/* printf("mark stack overflow (late)\n"); */
set_ephemerons(ae, be, done_ephemerons, e);
return 0;
}
}
/* Done with this one: */
e->next = done_ephemerons;
done_ephemerons = e;
}
} else {
/* Ephemeron previously done, so drop it. This case
shouldn't happen, because it should have been
dropped earlier. */
}
}
/* Combine ae & be back into ephemerons list: */
set_ephemerons(ae, be, NULL, NULL);
} while (did_one);
return ever_done;
}
#endif
static Scheme_Object *make_ephemeron(int argc, Scheme_Object **argv)
{
return scheme_make_ephemeron(argv[0], argv[1]);
}
static Scheme_Object *ephemeron_value(int argc, Scheme_Object **argv)
{
Scheme_Object *v;
if (!SAME_TYPE(SCHEME_TYPE(argv[0]), scheme_ephemeron_type))
scheme_wrong_type("ephemeron-value", "ephemeron", 0, argc, argv);
v = scheme_ephemeron_value(argv[0]);
if (!v)
return scheme_false;
else
return v;
}
static Scheme_Object *ephemeronp(int argc, Scheme_Object *argv[])
{
return (SAME_TYPE(SCHEME_TYPE(argv[0]), scheme_ephemeron_type)
? scheme_true
: scheme_false);
}
#ifndef MZ_PRECISE_GC
int scheme_propagate_ephemeron_marks()
{
return mark_ephemerons();
}
void scheme_clear_ephemerons()
{
Scheme_Ephemeron *e;
for (e = ephemerons; e; e = e->next) {
e->val = NULL;
e->key = NULL;
}
ephemerons = done_ephemerons;
done_ephemerons = NULL;
}
#endif

View File

@ -1240,10 +1240,14 @@ print(Scheme_Object *obj, int notdisplay, int compact, Scheme_Hash_Table *ht,
} }
} }
if (SCHEME_SYMBOLP(obj)) if (SCHEME_SYMBOLP(obj)
|| SCHEME_KEYWORDP(obj))
{ {
int l; int l;
Scheme_Object *idx; Scheme_Object *idx;
int is_kw;
is_kw = SCHEME_KEYWORDP(obj);
if (compact) if (compact)
idx = scheme_hash_get(symtab, obj); idx = scheme_hash_get(symtab, obj);
@ -1259,12 +1263,14 @@ print(Scheme_Object *obj, int notdisplay, int compact, Scheme_Hash_Table *ht,
weird = SCHEME_SYM_WEIRDP(obj); weird = SCHEME_SYM_WEIRDP(obj);
l = SCHEME_SYM_LEN(obj); l = SCHEME_SYM_LEN(obj);
if (!weird && (l < CPT_RANGE(SMALL_SYMBOL))) { if (!weird && !is_kw && (l < CPT_RANGE(SMALL_SYMBOL))) {
unsigned char s[1]; unsigned char s[1];
s[0] = l + CPT_SMALL_SYMBOL_START; s[0] = l + CPT_SMALL_SYMBOL_START;
print_this_string(pp, (char *)s, 0, 1); print_this_string(pp, (char *)s, 0, 1);
} else { } else {
print_compact(pp, (weird ? CPT_WEIRD_SYMBOL : CPT_SYMBOL)); print_compact(pp, (is_kw
? CPT_KEYWORD
: (weird ? CPT_WEIRD_SYMBOL : CPT_SYMBOL)));
if (weird) { if (weird) {
print_compact_number(pp, SCHEME_SYM_UNINTERNEDP(obj) ? 1 : 0); print_compact_number(pp, SCHEME_SYM_UNINTERNEDP(obj) ? 1 : 0);
} }
@ -1283,6 +1289,9 @@ print(Scheme_Object *obj, int notdisplay, int compact, Scheme_Hash_Table *ht,
} else if (notdisplay) { } else if (notdisplay) {
if (pp->honu_mode) { if (pp->honu_mode) {
/* Honu symbol... */ /* Honu symbol... */
if (is_kw)
print_utf8_string(pp, "key(", 0, 4);
else
print_utf8_string(pp, "sym(", 0, 4); print_utf8_string(pp, "sym(", 0, 4);
{ {
int i; int i;
@ -1308,16 +1317,23 @@ print(Scheme_Object *obj, int notdisplay, int compact, Scheme_Hash_Table *ht,
} else { } else {
const char *s; const char *s;
if (is_kw)
print_utf8_string(pp, "#:", 0, 2);
s = scheme_symbol_name_and_size(obj, (unsigned int *)&l, s = scheme_symbol_name_and_size(obj, (unsigned int *)&l,
((pp->can_read_pipe_quote ((pp->can_read_pipe_quote
? SCHEME_SNF_PIPE_QUOTE ? SCHEME_SNF_PIPE_QUOTE
: SCHEME_SNF_NO_PIPE_QUOTE) : SCHEME_SNF_NO_PIPE_QUOTE)
| (pp->case_sens | (pp->case_sens
? 0 ? 0
: SCHEME_SNF_NEED_CASE))); : SCHEME_SNF_NEED_CASE)
| (is_kw
? SCHEME_SNF_KEYWORD
: 0)));
print_utf8_string(pp, s, 0, l); print_utf8_string(pp, s, 0, l);
} }
} else { } else {
if (is_kw)
print_utf8_string(pp, "#:", 0, 2);
print_utf8_string(pp, (char *)obj, ((char *)(SCHEME_SYM_VAL(obj))) - ((char *)obj), print_utf8_string(pp, (char *)obj, ((char *)(SCHEME_SYM_VAL(obj))) - ((char *)obj),
SCHEME_SYM_LEN(obj)); SCHEME_SYM_LEN(obj));
} }

View File

@ -174,6 +174,13 @@ static Scheme_Object *read_symbol(int init_ch,
Scheme_Object *indentation, Scheme_Object *indentation,
ReadParams *params, ReadParams *params,
Readtable *table); Readtable *table);
static Scheme_Object *read_keyword(int init_ch,
Scheme_Object *port, Scheme_Object *stxsrc,
long line, long col, long pos,
Scheme_Hash_Table **ht,
Scheme_Object *indentation,
ReadParams *params,
Readtable *table);
static Scheme_Object *read_character(Scheme_Object *port, Scheme_Object *stcsrc, static Scheme_Object *read_character(Scheme_Object *port, Scheme_Object *stcsrc,
long line, long col, long pos, long line, long col, long pos,
Scheme_Hash_Table **ht, Scheme_Hash_Table **ht,
@ -985,6 +992,11 @@ read_inner_inner(Scheme_Object *port, Scheme_Object *stxsrc, Scheme_Hash_Table *
return read_symbol('#', port, stxsrc, line, col, pos, ht, indentation, params, table); return read_symbol('#', port, stxsrc, line, col, pos, ht, indentation, params, table);
} }
break; break;
case ':':
if (!params->honu_mode) {
return read_keyword(-1, port, stxsrc, line, col, pos, ht, indentation, params, table);
}
break;
case '(': case '(':
if (!params->honu_mode) { if (!params->honu_mode) {
return read_vector(port, stxsrc, line, col, pos, ')', -1, NULL, ht, indentation, params); return read_vector(port, stxsrc, line, col, pos, ')', -1, NULL, ht, indentation, params);
@ -2732,7 +2744,7 @@ read_number_or_symbol(int init_ch, Scheme_Object *port,
Scheme_Object *stxsrc, long line, long col, long pos, Scheme_Object *stxsrc, long line, long col, long pos,
int is_float, int is_not_float, int is_float, int is_not_float,
int radix, int radix_set, int radix, int radix_set,
int is_symbol, int pipe_quote, int is_symbol, int is_kw, int pipe_quote,
Scheme_Hash_Table **ht, Scheme_Hash_Table **ht,
Scheme_Object *indentation, ReadParams *params, Readtable *table) Scheme_Object *indentation, ReadParams *params, Readtable *table)
{ {
@ -2825,12 +2837,12 @@ read_number_or_symbol(int init_ch, Scheme_Object *port,
ch = scheme_getc_special_ok(port); ch = scheme_getc_special_ok(port);
if (ch == EOF) { if (ch == EOF) {
scheme_read_err(port, stxsrc, line, col, pos, SPAN(port, pos), EOF, indentation, scheme_read_err(port, stxsrc, line, col, pos, SPAN(port, pos), EOF, indentation,
"read: EOF following `%c' in symbol", esc_ch); "read: EOF following `%c' in %s", esc_ch, is_kw ? "keyword" : "symbol");
return NULL; return NULL;
} else if (ch == SCHEME_SPECIAL) { } else if (ch == SCHEME_SPECIAL) {
scheme_get_ready_read_special(port, stxsrc, ht); scheme_get_ready_read_special(port, stxsrc, ht);
scheme_read_err(port, stxsrc, line, col, pos, SPAN(port, pos), SCHEME_SPECIAL, indentation, scheme_read_err(port, stxsrc, line, col, pos, SPAN(port, pos), SCHEME_SPECIAL, indentation,
"read: non-character following `%c' in symbol", esc_ch); "read: non-character following `%c' in %s", esc_ch, is_kw ? "keyword" : "symbol");
return NULL; return NULL;
} }
quoted = 1; quoted = 1;
@ -2897,7 +2909,8 @@ read_number_or_symbol(int init_ch, Scheme_Object *port,
if (running_quote && (ch == SCHEME_SPECIAL)) { if (running_quote && (ch == SCHEME_SPECIAL)) {
scheme_get_ready_read_special(port, stxsrc, ht); scheme_get_ready_read_special(port, stxsrc, ht);
scheme_read_err(port, stxsrc, line, col, pos, SPAN(port, pos), SCHEME_SPECIAL, indentation, scheme_read_err(port, stxsrc, line, col, pos, SPAN(port, pos), SCHEME_SPECIAL, indentation,
"read: non-character following `%c' in symbol", running_quote_ch); "read: non-character following `%c' in %s", running_quote_ch,
is_kw ? "keyword" : "symbol");
} }
if (ungetc_ok) if (ungetc_ok)
@ -2995,6 +3008,9 @@ read_number_or_symbol(int init_ch, Scheme_Object *port,
"read: bad number: %5", buf); "read: bad number: %5", buf);
return NULL; return NULL;
} }
if (is_kw) {
o = scheme_intern_exact_char_keyword(buf, i);
} else
o = scheme_intern_exact_char_symbol(buf, i); o = scheme_intern_exact_char_symbol(buf, i);
} }
@ -3016,7 +3032,7 @@ read_number(int init_ch,
return read_number_or_symbol(init_ch, return read_number_or_symbol(init_ch,
port, stxsrc, line, col, pos, port, stxsrc, line, col, pos,
is_float, is_not_float, is_float, is_not_float,
radix, radix_set, 0, radix, radix_set, 0, 0,
params->can_read_pipe_quote, params->can_read_pipe_quote,
ht, indentation, params, table); ht, indentation, params, table);
} }
@ -3030,7 +3046,21 @@ read_symbol(int init_ch,
{ {
return read_number_or_symbol(init_ch, return read_number_or_symbol(init_ch,
port, stxsrc, line, col, pos, port, stxsrc, line, col, pos,
0, 0, 10, 0, 1, 0, 0, 10, 0, 1, 0,
params->can_read_pipe_quote,
ht, indentation, params, table);
}
static Scheme_Object *
read_keyword(int init_ch,
Scheme_Object *port,
Scheme_Object *stxsrc, long line, long col, long pos,
Scheme_Hash_Table **ht,
Scheme_Object *indentation, ReadParams *params, Readtable *table)
{
return read_number_or_symbol(init_ch,
port, stxsrc, line, col, pos,
0, 0, 10, 0, 1, 1,
params->can_read_pipe_quote, params->can_read_pipe_quote,
ht, indentation, params, table); ht, indentation, params, table);
} }
@ -3791,6 +3821,16 @@ static Scheme_Object *read_compact(CPort *port, int use_stack)
a particular compiled expression. */ a particular compiled expression. */
} }
break; break;
case CPT_KEYWORD:
l = read_compact_number(port);
RANGE_CHECK_GETS(l);
s = read_compact_chars(port, buffer, BLK_BUF_SIZE, l);
v = scheme_intern_exact_keyword(s, l);
l = read_compact_number(port);
RANGE_CHECK(l, < port->symtab_size);
port->symtab[l] = v;
break;
case CPT_BYTE_STRING: case CPT_BYTE_STRING:
l = read_compact_number(port); l = read_compact_number(port);
RANGE_CHECK_GETS(l); RANGE_CHECK_GETS(l);

View File

@ -931,6 +931,7 @@ static void count_managed(Scheme_Custodian *m, int *c, int *a, int *u, int *t,
#if MZ_PRECISE_GC_TRACE #if MZ_PRECISE_GC_TRACE
extern int GC_show_trace; extern int GC_show_trace;
extern int GC_show_finals;
extern int GC_trace_for_tag; extern int GC_trace_for_tag;
extern int GC_path_length_limit; extern int GC_path_length_limit;
extern void (*GC_for_each_found)(void *p); extern void (*GC_for_each_found)(void *p);
@ -1326,6 +1327,7 @@ Scheme_Object *scheme_dump_gc_stats(int c, Scheme_Object *p[])
# if MZ_PRECISE_GC_TRACE # if MZ_PRECISE_GC_TRACE
GC_trace_for_tag = -1; GC_trace_for_tag = -1;
GC_show_trace = 0; GC_show_trace = 0;
GC_show_finals = 0;
GC_for_each_found = NULL; GC_for_each_found = NULL;
cons_accum_result = scheme_void; cons_accum_result = scheme_void;
if (c && SCHEME_SYMBOLP(p[0])) { if (c && SCHEME_SYMBOLP(p[0])) {
@ -1347,6 +1349,9 @@ Scheme_Object *scheme_dump_gc_stats(int c, Scheme_Object *p[])
break; break;
} }
} }
if (!strcmp("fnl", s))
GC_show_finals = 1;
} else if (SCHEME_INTP(p[0])) { } else if (SCHEME_INTP(p[0])) {
GC_trace_for_tag = SCHEME_INT_VAL(p[0]); GC_trace_for_tag = SCHEME_INT_VAL(p[0]);
GC_show_trace = 1; GC_show_trace = 1;
@ -1435,6 +1440,7 @@ Scheme_Object *scheme_dump_gc_stats(int c, Scheme_Object *p[])
scheme_console_printf("Begin Help\n"); scheme_console_printf("Begin Help\n");
scheme_console_printf(" (dump-memory-stats sym) - prints paths to instances of type named by sym.\n"); scheme_console_printf(" (dump-memory-stats sym) - prints paths to instances of type named by sym.\n");
scheme_console_printf(" Example: (dump-memory-stats '<pair>)\n"); scheme_console_printf(" Example: (dump-memory-stats '<pair>)\n");
scheme_console_printf(" (dump-memory-stats 'fnl) - prints not-yet-finalized objects.\n");
scheme_console_printf(" (dump-memory-stats num) - prints paths to objects with tag num.\n"); scheme_console_printf(" (dump-memory-stats num) - prints paths to objects with tag num.\n");
scheme_console_printf(" (dump-memory-stats -num) - prints paths to objects of size num.\n"); scheme_console_printf(" (dump-memory-stats -num) - prints paths to objects of size num.\n");
scheme_console_printf(" (dump-memory-stats sym/num len) - limits path to size len.\n"); scheme_console_printf(" (dump-memory-stats sym/num len) - limits path to size len.\n");

View File

@ -4,6 +4,7 @@ enum {
CPT_SYMBOL, CPT_SYMBOL,
CPT_SYMREF, CPT_SYMREF,
CPT_WEIRD_SYMBOL, CPT_WEIRD_SYMBOL,
CPT_KEYWORD,
CPT_BYTE_STRING, CPT_BYTE_STRING,
CPT_CHAR_STRING, CPT_CHAR_STRING,
CPT_CHAR, CPT_CHAR,
@ -33,7 +34,7 @@ enum {
_CPT_COUNT_ _CPT_COUNT_
}; };
#define CPT_SMALL_NUMBER_START 30 #define CPT_SMALL_NUMBER_START 31
#define CPT_SMALL_NUMBER_END 45 #define CPT_SMALL_NUMBER_END 45
#define CPT_SMALL_SYMBOL_START 45 #define CPT_SMALL_SYMBOL_START 45

View File

@ -846,6 +846,9 @@ MZ_EXTERN const char *scheme_symbol_name(Scheme_Object *sym);
MZ_EXTERN const char *scheme_symbol_name_and_size(Scheme_Object *sym, unsigned int *l, int flags); MZ_EXTERN const char *scheme_symbol_name_and_size(Scheme_Object *sym, unsigned int *l, int flags);
MZ_EXTERN char *scheme_symbol_val(Scheme_Object *sym); MZ_EXTERN char *scheme_symbol_val(Scheme_Object *sym);
MZ_EXTERN Scheme_Object *scheme_intern_exact_keyword(const char *name, unsigned int len);
MZ_EXTERN Scheme_Object *scheme_intern_exact_char_keyword(const mzchar *name, unsigned int len);
/*========================================================================*/ /*========================================================================*/
/* structs */ /* structs */
/*========================================================================*/ /*========================================================================*/
@ -930,6 +933,9 @@ MZ_EXTERN void scheme_set_box(Scheme_Object *b, Scheme_Object *v);
MZ_EXTERN Scheme_Object *scheme_make_weak_box(Scheme_Object *v); MZ_EXTERN Scheme_Object *scheme_make_weak_box(Scheme_Object *v);
MZ_EXTERN Scheme_Object *scheme_make_ephemeron(Scheme_Object *key, Scheme_Object *val);
MZ_EXTERN Scheme_Object *scheme_ephemeron_value(Scheme_Object *o);
MZ_EXTERN Scheme_Object *scheme_load(const char *file); MZ_EXTERN Scheme_Object *scheme_load(const char *file);
MZ_EXTERN Scheme_Object *scheme_load_extension(const char *filename, Scheme_Env *env); MZ_EXTERN Scheme_Object *scheme_load_extension(const char *filename, Scheme_Env *env);
MZ_EXTERN void scheme_register_extension_global(void *ptr, long size); MZ_EXTERN void scheme_register_extension_global(void *ptr, long size);

View File

@ -696,6 +696,8 @@ Scheme_Object *(*scheme_make_exact_char_symbol)(const mzchar *name, unsigned int
const char *(*scheme_symbol_name)(Scheme_Object *sym); const char *(*scheme_symbol_name)(Scheme_Object *sym);
const char *(*scheme_symbol_name_and_size)(Scheme_Object *sym, unsigned int *l, int flags); const char *(*scheme_symbol_name_and_size)(Scheme_Object *sym, unsigned int *l, int flags);
char *(*scheme_symbol_val)(Scheme_Object *sym); char *(*scheme_symbol_val)(Scheme_Object *sym);
Scheme_Object *(*scheme_intern_exact_keyword)(const char *name, unsigned int len);
Scheme_Object *(*scheme_intern_exact_char_keyword)(const mzchar *name, unsigned int len);
/*========================================================================*/ /*========================================================================*/
/* structs */ /* structs */
/*========================================================================*/ /*========================================================================*/
@ -762,6 +764,8 @@ Scheme_Object *(*scheme_box)(Scheme_Object *v);
Scheme_Object *(*scheme_unbox)(Scheme_Object *obj); Scheme_Object *(*scheme_unbox)(Scheme_Object *obj);
void (*scheme_set_box)(Scheme_Object *b, Scheme_Object *v); void (*scheme_set_box)(Scheme_Object *b, Scheme_Object *v);
Scheme_Object *(*scheme_make_weak_box)(Scheme_Object *v); Scheme_Object *(*scheme_make_weak_box)(Scheme_Object *v);
Scheme_Object *(*scheme_make_ephemeron)(Scheme_Object *key, Scheme_Object *val);
Scheme_Object *(*scheme_ephemeron_value)(Scheme_Object *o);
Scheme_Object *(*scheme_load)(const char *file); Scheme_Object *(*scheme_load)(const char *file);
Scheme_Object *(*scheme_load_extension)(const char *filename, Scheme_Env *env); Scheme_Object *(*scheme_load_extension)(const char *filename, Scheme_Env *env);
void (*scheme_register_extension_global)(void *ptr, long size); void (*scheme_register_extension_global)(void *ptr, long size);

View File

@ -478,6 +478,8 @@
scheme_extension_table->scheme_symbol_name = scheme_symbol_name; scheme_extension_table->scheme_symbol_name = scheme_symbol_name;
scheme_extension_table->scheme_symbol_name_and_size = scheme_symbol_name_and_size; scheme_extension_table->scheme_symbol_name_and_size = scheme_symbol_name_and_size;
scheme_extension_table->scheme_symbol_val = scheme_symbol_val; scheme_extension_table->scheme_symbol_val = scheme_symbol_val;
scheme_extension_table->scheme_intern_exact_keyword = scheme_intern_exact_keyword;
scheme_extension_table->scheme_intern_exact_char_keyword = scheme_intern_exact_char_keyword;
scheme_extension_table->scheme_make_struct_values = scheme_make_struct_values; scheme_extension_table->scheme_make_struct_values = scheme_make_struct_values;
scheme_extension_table->scheme_make_struct_names = scheme_make_struct_names; scheme_extension_table->scheme_make_struct_names = scheme_make_struct_names;
scheme_extension_table->scheme_make_struct_type = scheme_make_struct_type; scheme_extension_table->scheme_make_struct_type = scheme_make_struct_type;
@ -518,6 +520,8 @@
scheme_extension_table->scheme_unbox = scheme_unbox; scheme_extension_table->scheme_unbox = scheme_unbox;
scheme_extension_table->scheme_set_box = scheme_set_box; scheme_extension_table->scheme_set_box = scheme_set_box;
scheme_extension_table->scheme_make_weak_box = scheme_make_weak_box; scheme_extension_table->scheme_make_weak_box = scheme_make_weak_box;
scheme_extension_table->scheme_make_ephemeron = scheme_make_ephemeron;
scheme_extension_table->scheme_ephemeron_value = scheme_ephemeron_value;
scheme_extension_table->scheme_load = scheme_load; scheme_extension_table->scheme_load = scheme_load;
scheme_extension_table->scheme_load_extension = scheme_load_extension; scheme_extension_table->scheme_load_extension = scheme_load_extension;
scheme_extension_table->scheme_register_extension_global = scheme_register_extension_global; scheme_extension_table->scheme_register_extension_global = scheme_register_extension_global;

View File

@ -478,6 +478,8 @@
#define scheme_symbol_name (scheme_extension_table->scheme_symbol_name) #define scheme_symbol_name (scheme_extension_table->scheme_symbol_name)
#define scheme_symbol_name_and_size (scheme_extension_table->scheme_symbol_name_and_size) #define scheme_symbol_name_and_size (scheme_extension_table->scheme_symbol_name_and_size)
#define scheme_symbol_val (scheme_extension_table->scheme_symbol_val) #define scheme_symbol_val (scheme_extension_table->scheme_symbol_val)
#define scheme_intern_exact_keyword (scheme_extension_table->scheme_intern_exact_keyword)
#define scheme_intern_exact_char_keyword (scheme_extension_table->scheme_intern_exact_char_keyword)
#define scheme_make_struct_values (scheme_extension_table->scheme_make_struct_values) #define scheme_make_struct_values (scheme_extension_table->scheme_make_struct_values)
#define scheme_make_struct_names (scheme_extension_table->scheme_make_struct_names) #define scheme_make_struct_names (scheme_extension_table->scheme_make_struct_names)
#define scheme_make_struct_type (scheme_extension_table->scheme_make_struct_type) #define scheme_make_struct_type (scheme_extension_table->scheme_make_struct_type)
@ -518,6 +520,8 @@
#define scheme_unbox (scheme_extension_table->scheme_unbox) #define scheme_unbox (scheme_extension_table->scheme_unbox)
#define scheme_set_box (scheme_extension_table->scheme_set_box) #define scheme_set_box (scheme_extension_table->scheme_set_box)
#define scheme_make_weak_box (scheme_extension_table->scheme_make_weak_box) #define scheme_make_weak_box (scheme_extension_table->scheme_make_weak_box)
#define scheme_make_ephemeron (scheme_extension_table->scheme_make_ephemeron)
#define scheme_ephemeron_value (scheme_extension_table->scheme_ephemeron_value)
#define scheme_load (scheme_extension_table->scheme_load) #define scheme_load (scheme_extension_table->scheme_load)
#define scheme_load_extension (scheme_extension_table->scheme_load_extension) #define scheme_load_extension (scheme_extension_table->scheme_load_extension)
#define scheme_register_extension_global (scheme_extension_table->scheme_register_extension_global) #define scheme_register_extension_global (scheme_extension_table->scheme_register_extension_global)

View File

@ -11,9 +11,9 @@
EXPECTED_PRIM_COUNT to the new value, and then USE_COMPILED_STARTUP EXPECTED_PRIM_COUNT to the new value, and then USE_COMPILED_STARTUP
can be set to 1 again. */ can be set to 1 again. */
#define USE_COMPILED_STARTUP 1 #define USE_COMPILED_STARTUP 0
#define EXPECTED_PRIM_COUNT 838 #define EXPECTED_PRIM_COUNT 844
#ifdef MZSCHEME_SOMETHING_OMITTED #ifdef MZSCHEME_SOMETHING_OMITTED
# undef USE_COMPILED_STARTUP # undef USE_COMPILED_STARTUP

View File

@ -105,6 +105,9 @@ void scheme_reset_finalizations(void);
extern unsigned long scheme_get_stack_base(); extern unsigned long scheme_get_stack_base();
int scheme_propagate_ephemeron_marks();
void scheme_clear_ephemerons();
#ifndef MZ_XFORM #ifndef MZ_XFORM
# define HIDE_FROM_XFORM(x) x # define HIDE_FROM_XFORM(x) x
#endif #endif

View File

@ -9,6 +9,6 @@
#define MZSCHEME_VERSION_MAJOR 299 #define MZSCHEME_VERSION_MAJOR 299
#define MZSCHEME_VERSION_MINOR 402 #define MZSCHEME_VERSION_MINOR 403
#define MZSCHEME_VERSION "299.402" _MZ_SPECIAL_TAG #define MZSCHEME_VERSION "299.403" _MZ_SPECIAL_TAG

View File

@ -141,7 +141,9 @@ static void init_push_copied_stacks(void)
static void update_push_copied_stacks(void) static void update_push_copied_stacks(void)
{ {
do {
push_copied_stacks(0); push_copied_stacks(0);
} while (scheme_propagate_ephemeron_marks());
} }
void scheme_init_setjumpup(void) void scheme_init_setjumpup(void)

View File

@ -61,150 +61,152 @@ enum {
scheme_byte_string_type, /* 43 */ scheme_byte_string_type, /* 43 */
scheme_path_type, /* 44 */ scheme_path_type, /* 44 */
scheme_symbol_type, /* 45 */ scheme_symbol_type, /* 45 */
scheme_null_type, /* 46 */ scheme_keyword_type, /* 46 */
scheme_pair_type, /* 47 */ scheme_null_type, /* 47 */
scheme_vector_type, /* 48 */ scheme_pair_type, /* 48 */
scheme_inspector_type, /* 49 */ scheme_vector_type, /* 49 */
scheme_input_port_type, /* 50 */ scheme_inspector_type, /* 50 */
scheme_output_port_type, /* 51 */ scheme_input_port_type, /* 51 */
scheme_eof_type, /* 52 */ scheme_output_port_type, /* 52 */
scheme_true_type, /* 53 */ scheme_eof_type, /* 53 */
scheme_false_type, /* 54 */ scheme_true_type, /* 54 */
scheme_void_type, /* 55 */ scheme_false_type, /* 55 */
scheme_syntax_compiler_type, /* 56 */ scheme_void_type, /* 56 */
scheme_macro_type, /* 57 */ scheme_syntax_compiler_type, /* 57 */
scheme_box_type, /* 58 */ scheme_macro_type, /* 58 */
scheme_thread_type, /* 59 */ scheme_box_type, /* 59 */
scheme_stx_offset_type, /* 60 */ scheme_thread_type, /* 60 */
scheme_cont_mark_set_type, /* 61 */ scheme_stx_offset_type, /* 61 */
scheme_sema_type, /* 62 */ scheme_cont_mark_set_type, /* 62 */
scheme_hash_table_type, /* 63 */ scheme_sema_type, /* 63 */
scheme_cpointer_type, /* 64 */ scheme_hash_table_type, /* 64 */
scheme_weak_box_type, /* 65 */ scheme_cpointer_type, /* 65 */
scheme_struct_type_type, /* 66 */ scheme_weak_box_type, /* 66 */
scheme_module_index_type, /* 67 */ scheme_ephemeron_type, /* 67 */
scheme_set_macro_type, /* 68 */ scheme_struct_type_type, /* 68 */
scheme_listener_type, /* 69 */ scheme_module_index_type, /* 69 */
scheme_namespace_type, /* 70 */ scheme_set_macro_type, /* 70 */
scheme_config_type, /* 71 */ scheme_listener_type, /* 71 */
scheme_stx_type, /* 72 */ scheme_namespace_type, /* 72 */
scheme_will_executor_type, /* 73 */ scheme_config_type, /* 73 */
scheme_custodian_type, /* 74 */ scheme_stx_type, /* 74 */
scheme_random_state_type, /* 75 */ scheme_will_executor_type, /* 75 */
scheme_regexp_type, /* 76 */ scheme_custodian_type, /* 76 */
scheme_bucket_type, /* 77 */ scheme_random_state_type, /* 77 */
scheme_bucket_table_type, /* 78 */ scheme_regexp_type, /* 78 */
scheme_subprocess_type, /* 79 */ scheme_bucket_type, /* 79 */
scheme_compilation_top_type, /* 80 */ scheme_bucket_table_type, /* 80 */
scheme_wrap_chunk_type, /* 81 */ scheme_subprocess_type, /* 81 */
scheme_eval_waiting_type, /* 82 */ scheme_compilation_top_type, /* 82 */
scheme_tail_call_waiting_type, /* 83 */ scheme_wrap_chunk_type, /* 83 */
scheme_undefined_type, /* 84 */ scheme_eval_waiting_type, /* 84 */
scheme_struct_property_type, /* 85 */ scheme_tail_call_waiting_type, /* 85 */
scheme_multiple_values_type, /* 86 */ scheme_undefined_type, /* 86 */
scheme_placeholder_type, /* 87 */ scheme_struct_property_type, /* 87 */
scheme_case_lambda_sequence_type, /* 88 */ scheme_multiple_values_type, /* 88 */
scheme_begin0_sequence_type, /* 89 */ scheme_placeholder_type, /* 89 */
scheme_rename_table_type, /* 90 */ scheme_case_lambda_sequence_type, /* 90 */
scheme_module_type, /* 91 */ scheme_begin0_sequence_type, /* 91 */
scheme_svector_type, /* 92 */ scheme_rename_table_type, /* 92 */
scheme_lazy_macro_type, /* 93 */ scheme_module_type, /* 93 */
scheme_resolve_prefix_type, /* 94 */ scheme_svector_type, /* 94 */
scheme_security_guard_type, /* 95 */ scheme_lazy_macro_type, /* 95 */
scheme_indent_type, /* 96 */ scheme_resolve_prefix_type, /* 96 */
scheme_udp_type, /* 97 */ scheme_security_guard_type, /* 97 */
scheme_udp_evt_type, /* 98 */ scheme_indent_type, /* 98 */
scheme_tcp_accept_evt_type, /* 99 */ scheme_udp_type, /* 99 */
scheme_id_macro_type, /* 100 */ scheme_udp_evt_type, /* 100 */
scheme_evt_set_type, /* 101 */ scheme_tcp_accept_evt_type, /* 101 */
scheme_wrap_evt_type, /* 102 */ scheme_id_macro_type, /* 102 */
scheme_handle_evt_type, /* 103 */ scheme_evt_set_type, /* 103 */
scheme_nack_guard_evt_type, /* 104 */ scheme_wrap_evt_type, /* 104 */
scheme_semaphore_repost_type, /* 105 */ scheme_handle_evt_type, /* 105 */
scheme_channel_type, /* 106 */ scheme_nack_guard_evt_type, /* 106 */
scheme_channel_put_type, /* 107 */ scheme_semaphore_repost_type, /* 107 */
scheme_thread_resume_type, /* 108 */ scheme_channel_type, /* 108 */
scheme_thread_suspend_type, /* 109 */ scheme_channel_put_type, /* 109 */
scheme_thread_dead_type, /* 110 */ scheme_thread_resume_type, /* 110 */
scheme_poll_evt_type, /* 111 */ scheme_thread_suspend_type, /* 111 */
scheme_nack_evt_type, /* 112 */ scheme_thread_dead_type, /* 112 */
scheme_module_registry_type, /* 113 */ scheme_poll_evt_type, /* 113 */
scheme_thread_set_type, /* 114 */ scheme_nack_evt_type, /* 114 */
scheme_string_converter_type, /* 115 */ scheme_module_registry_type, /* 115 */
scheme_alarm_type, /* 116 */ scheme_thread_set_type, /* 116 */
scheme_thread_cell_type, /* 117 */ scheme_string_converter_type, /* 117 */
scheme_channel_syncer_type, /* 118 */ scheme_alarm_type, /* 118 */
scheme_special_comment_type, /* 119 */ scheme_thread_cell_type, /* 119 */
scheme_write_evt_type, /* 120 */ scheme_channel_syncer_type, /* 120 */
scheme_always_evt_type, /* 121 */ scheme_special_comment_type, /* 121 */
scheme_never_evt_type, /* 122 */ scheme_write_evt_type, /* 122 */
scheme_progress_evt_type, /* 123 */ scheme_always_evt_type, /* 123 */
scheme_certifications_type, /* 124 */ scheme_never_evt_type, /* 124 */
scheme_already_comp_type, /* 125 */ scheme_progress_evt_type, /* 125 */
scheme_readtable_type, /* 126 */ scheme_certifications_type, /* 126 */
scheme_intdef_context_type, /* 127 */ scheme_already_comp_type, /* 127 */
scheme_lexical_rib_type, /* 128 */ scheme_readtable_type, /* 128 */
scheme_thread_cell_values_type, /* 129 */ scheme_intdef_context_type, /* 129 */
scheme_lexical_rib_type, /* 130 */
scheme_thread_cell_values_type, /* 131 */
#ifdef MZTAG_REQUIRED #ifdef MZTAG_REQUIRED
_scheme_last_normal_type_, /* 130 */ _scheme_last_normal_type_, /* 132 */
scheme_rt_comp_env, /* 131 */ scheme_rt_comp_env, /* 133 */
scheme_rt_constant_binding, /* 132 */ scheme_rt_constant_binding, /* 134 */
scheme_rt_resolve_info, /* 133 */ scheme_rt_resolve_info, /* 135 */
scheme_rt_compile_info, /* 134 */ scheme_rt_compile_info, /* 136 */
scheme_rt_cont_mark, /* 135 */ scheme_rt_cont_mark, /* 137 */
scheme_rt_saved_stack, /* 136 */ scheme_rt_saved_stack, /* 138 */
scheme_rt_reply_item, /* 137 */ scheme_rt_reply_item, /* 139 */
scheme_rt_closure_info, /* 138 */ scheme_rt_closure_info, /* 140 */
scheme_rt_overflow, /* 139 */ scheme_rt_overflow, /* 141 */
scheme_rt_dyn_wind_cell, /* 140 */ scheme_rt_dyn_wind_cell, /* 142 */
scheme_rt_cont_mark_chain, /* 141 */ scheme_rt_cont_mark_chain, /* 143 */
scheme_rt_dyn_wind_info, /* 142 */ scheme_rt_dyn_wind_info, /* 144 */
scheme_rt_dyn_wind, /* 143 */ scheme_rt_dyn_wind, /* 145 */
scheme_rt_dup_check, /* 144 */ scheme_rt_dup_check, /* 146 */
scheme_rt_thread_memory, /* 145 */ scheme_rt_thread_memory, /* 147 */
scheme_rt_input_file, /* 146 */ scheme_rt_input_file, /* 148 */
scheme_rt_input_fd, /* 147 */ scheme_rt_input_fd, /* 149 */
scheme_rt_oskit_console_input, /* 148 */ scheme_rt_oskit_console_input, /* 150 */
scheme_rt_tested_input_file, /* 149 */ scheme_rt_tested_input_file, /* 151 */
scheme_rt_tested_output_file, /* 150 */ scheme_rt_tested_output_file, /* 152 */
scheme_rt_indexed_string, /* 151 */ scheme_rt_indexed_string, /* 153 */
scheme_rt_output_file, /* 152 */ scheme_rt_output_file, /* 154 */
scheme_rt_load_handler_data, /* 153 */ scheme_rt_load_handler_data, /* 155 */
scheme_rt_pipe, /* 154 */ scheme_rt_pipe, /* 156 */
scheme_rt_beos_process, /* 155 */ scheme_rt_beos_process, /* 157 */
scheme_rt_system_child, /* 156 */ scheme_rt_system_child, /* 158 */
scheme_rt_tcp, /* 157 */ scheme_rt_tcp, /* 159 */
scheme_rt_write_data, /* 158 */ scheme_rt_write_data, /* 160 */
scheme_rt_tcp_select_info, /* 159 */ scheme_rt_tcp_select_info, /* 161 */
scheme_rt_namespace_option, /* 160 */ scheme_rt_namespace_option, /* 162 */
scheme_rt_param_data, /* 161 */ scheme_rt_param_data, /* 163 */
scheme_rt_will, /* 162 */ scheme_rt_will, /* 164 */
scheme_rt_will_registration, /* 163 */ scheme_rt_will_registration, /* 165 */
scheme_rt_struct_proc_info, /* 164 */ scheme_rt_struct_proc_info, /* 166 */
scheme_rt_linker_name, /* 165 */ scheme_rt_linker_name, /* 167 */
scheme_rt_param_map, /* 166 */ scheme_rt_param_map, /* 168 */
scheme_rt_finalization, /* 167 */ scheme_rt_finalization, /* 169 */
scheme_rt_finalizations, /* 168 */ scheme_rt_finalizations, /* 170 */
scheme_rt_cpp_object, /* 169 */ scheme_rt_cpp_object, /* 171 */
scheme_rt_cpp_array_object, /* 170 */ scheme_rt_cpp_array_object, /* 172 */
scheme_rt_stack_object, /* 171 */ scheme_rt_stack_object, /* 173 */
scheme_rt_preallocated_object, /* 172 */ scheme_rt_preallocated_object, /* 174 */
scheme_thread_hop_type, /* 173 */ scheme_thread_hop_type, /* 175 */
scheme_rt_srcloc, /* 174 */ scheme_rt_srcloc, /* 176 */
scheme_rt_evt, /* 175 */ scheme_rt_evt, /* 177 */
scheme_rt_syncing, /* 176 */ scheme_rt_syncing, /* 178 */
scheme_rt_comp_prefix, /* 177 */ scheme_rt_comp_prefix, /* 179 */
scheme_rt_user_input, /* 178 */ scheme_rt_user_input, /* 180 */
scheme_rt_user_output, /* 179 */ scheme_rt_user_output, /* 181 */
scheme_rt_compact_port, /* 180 */ scheme_rt_compact_port, /* 182 */
scheme_rt_read_special_dw, /* 181 */ scheme_rt_read_special_dw, /* 183 */
scheme_rt_regwork, /* 182 */ scheme_rt_regwork, /* 184 */
scheme_rt_buf_holder, /* 183 */ scheme_rt_buf_holder, /* 185 */
scheme_rt_parameterization, /* 184 */ scheme_rt_parameterization, /* 186 */
scheme_rt_print_params, /* 185 */ scheme_rt_print_params, /* 187 */
scheme_rt_read_params, /* 186 */ scheme_rt_read_params, /* 188 */
#endif #endif
_scheme_last_type_ _scheme_last_type_

View File

@ -47,6 +47,7 @@ extern int GC_is_marked(void *);
#endif #endif
Scheme_Hash_Table *scheme_symbol_table = NULL; Scheme_Hash_Table *scheme_symbol_table = NULL;
Scheme_Hash_Table *scheme_keyword_table = NULL;
Scheme_Hash_Table *scheme_parallel_symbol_table = NULL; Scheme_Hash_Table *scheme_parallel_symbol_table = NULL;
unsigned long scheme_max_found_symbol_name; unsigned long scheme_max_found_symbol_name;
@ -59,6 +60,9 @@ static Scheme_Object *symbol_p_prim (int argc, Scheme_Object *argv[]);
static Scheme_Object *string_to_symbol_prim (int argc, Scheme_Object *argv[]); static Scheme_Object *string_to_symbol_prim (int argc, Scheme_Object *argv[]);
static Scheme_Object *string_to_uninterned_symbol_prim (int argc, Scheme_Object *argv[]); static Scheme_Object *string_to_uninterned_symbol_prim (int argc, Scheme_Object *argv[]);
static Scheme_Object *symbol_to_string_prim (int argc, Scheme_Object *argv[]); static Scheme_Object *symbol_to_string_prim (int argc, Scheme_Object *argv[]);
static Scheme_Object *keyword_p_prim (int argc, Scheme_Object *argv[]);
static Scheme_Object *string_to_keyword_prim (int argc, Scheme_Object *argv[]);
static Scheme_Object *keyword_to_string_prim (int argc, Scheme_Object *argv[]);
static Scheme_Object *gensym(int argc, Scheme_Object *argv[]); static Scheme_Object *gensym(int argc, Scheme_Object *argv[]);
static int gensym_counter; static int gensym_counter;
@ -216,7 +220,9 @@ static void clean_one_symbol_table(Scheme_Hash_Table *symbol_table)
static void clean_symbol_table(void) static void clean_symbol_table(void)
{ {
clean_one_symbol_table(scheme_symbol_table); clean_one_symbol_table(scheme_symbol_table);
clean_one_symbol_table(scheme_keyword_table);
clean_one_symbol_table(scheme_parallel_symbol_table); clean_one_symbol_table(scheme_parallel_symbol_table);
scheme_clear_ephemerons();
} }
#endif #endif
@ -249,9 +255,11 @@ void
scheme_init_symbol_table () scheme_init_symbol_table ()
{ {
REGISTER_SO(scheme_symbol_table); REGISTER_SO(scheme_symbol_table);
REGISTER_SO(scheme_keyword_table);
REGISTER_SO(scheme_parallel_symbol_table); REGISTER_SO(scheme_parallel_symbol_table);
scheme_symbol_table = init_one_symbol_table(); scheme_symbol_table = init_one_symbol_table();
scheme_keyword_table = init_one_symbol_table();
scheme_parallel_symbol_table = init_one_symbol_table(); scheme_parallel_symbol_table = init_one_symbol_table();
#ifndef MZ_PRECISE_GC #ifndef MZ_PRECISE_GC
@ -287,6 +295,21 @@ scheme_init_symbol (Scheme_Env *env)
1, 1), 1, 1),
env); env);
scheme_add_global_constant("keyword?",
scheme_make_folding_prim(keyword_p_prim,
"keyword?",
1, 1, 1),
env);
scheme_add_global_constant("string->keyword",
scheme_make_prim_w_arity(string_to_keyword_prim,
"string->keyword",
1, 1), env);
scheme_add_global_constant("keyword->string",
scheme_make_prim_w_arity(keyword_to_string_prim,
"keyword->string",
1, 1),
env);
scheme_add_global_constant("gensym", scheme_add_global_constant("gensym",
scheme_make_prim_w_arity(gensym, scheme_make_prim_w_arity(gensym,
"gensym", "gensym",
@ -372,6 +395,28 @@ scheme_intern_exact_char_symbol(const mzchar *name, unsigned int len)
return scheme_intern_exact_symbol_in_table(scheme_symbol_table, 0, bs, blen); return scheme_intern_exact_symbol_in_table(scheme_symbol_table, 0, bs, blen);
} }
Scheme_Object *
scheme_intern_exact_keyword(const char *name, unsigned int len)
{
Scheme_Object *s;
s = scheme_intern_exact_symbol_in_table(scheme_keyword_table, 0, name, len);
if (s->type == scheme_symbol_type)
s->type = scheme_keyword_type;
return s;
}
Scheme_Object *scheme_intern_exact_char_keyword(const mzchar *name, unsigned int len)
{
char buf[64], *bs;
long blen;
Scheme_Object *s;
bs = scheme_utf8_encode_to_buffer_len(name, len, buf, 64, &blen);
s = scheme_intern_exact_symbol_in_table(scheme_keyword_table, 0, bs, blen);
if (s->type == scheme_symbol_type)
s->type = scheme_keyword_type;
return s;
}
#define MAX_SYMBOL_SIZE 256 #define MAX_SYMBOL_SIZE 256
Scheme_Object * Scheme_Object *
@ -441,14 +486,19 @@ const char *scheme_symbol_name_and_size(Scheme_Object *sym, unsigned int *length
&& (flags & SCHEME_SNF_FOR_TS))) && (flags & SCHEME_SNF_FOR_TS)))
if (len) { if (len) {
if (flags & SCHEME_SNF_KEYWORD) {
digit_start = 0;
} else {
digit_start = (isdigit((unsigned char)s[0]) || (s[0] == '.') digit_start = (isdigit((unsigned char)s[0]) || (s[0] == '.')
|| (s[0] == '+') || (s[0] == '-')); || (s[0] == '+') || (s[0] == '-'));
if (s[0] == '#' && (len == 1 || s[1] != '%')) if (s[0] == '#' && (len == 1 || s[1] != '%'))
has_special = 1; has_special = 1;
if (s[0] == '.' && len == 1) if (s[0] == '.' && len == 1)
has_special = 1; has_special = 1;
}
} else { } else {
digit_start = 0; digit_start = 0;
if (!(flags & SCHEME_SNF_KEYWORD))
has_space = 1; has_space = 1;
} }
@ -607,6 +657,32 @@ symbol_to_string_prim (int argc, Scheme_Object *argv[])
SCHEME_SYM_LEN(argv[0])); SCHEME_SYM_LEN(argv[0]));
} }
static Scheme_Object *
keyword_p_prim (int argc, Scheme_Object *argv[])
{
return SCHEME_KEYWORDP(argv[0]) ? scheme_true : scheme_false;
}
static Scheme_Object *
string_to_keyword_prim (int argc, Scheme_Object *argv[])
{
if (!SCHEME_CHAR_STRINGP(argv[0]))
scheme_wrong_type("string->keyword", "string", 0, argc, argv);
return scheme_intern_exact_char_keyword(SCHEME_CHAR_STR_VAL(argv[0]),
SCHEME_CHAR_STRTAG_VAL(argv[0]));
}
static Scheme_Object *
keyword_to_string_prim (int argc, Scheme_Object *argv[])
{
if (!SCHEME_KEYWORDP(argv[0]))
scheme_wrong_type("keyword->string", "keyword", 0, argc, argv);
return scheme_make_sized_offset_utf8_string((char *)(argv[0]),
SCHEME_SYMSTR_OFFSET(argv[0]),
SCHEME_SYM_LEN(argv[0]));
}
static Scheme_Object *gensym(int argc, Scheme_Object *argv[]) static Scheme_Object *gensym(int argc, Scheme_Object *argv[])
{ {
char buffer[100], *str; char buffer[100], *str;

View File

@ -5365,13 +5365,14 @@ Scheme_Object *scheme_thread_cell_get(Scheme_Object *cell, Scheme_Thread_Cell_Ta
v = scheme_lookup_in_table(cells, (const char *)cell); v = scheme_lookup_in_table(cells, (const char *)cell);
if (v) if (v)
return v; return scheme_ephemeron_value(v);
else else
return ((Thread_Cell *)cell)->def_val; return ((Thread_Cell *)cell)->def_val;
} }
void scheme_thread_cell_set(Scheme_Object *cell, Scheme_Thread_Cell_Table *cells, Scheme_Object *v) void scheme_thread_cell_set(Scheme_Object *cell, Scheme_Thread_Cell_Table *cells, Scheme_Object *v)
{ {
v = scheme_make_ephemeron(cell, v);
scheme_add_to_table(cells, (const char *)cell, (void *)v, 0); scheme_add_to_table(cells, (const char *)cell, (void *)v, 0);
} }
@ -5843,6 +5844,7 @@ static void make_initial_config(Scheme_Thread *p)
init_param(cells, paramz, MZCONFIG_CAN_READ_DOT, scheme_true); init_param(cells, paramz, MZCONFIG_CAN_READ_DOT, scheme_true);
init_param(cells, paramz, MZCONFIG_CAN_READ_QUASI, scheme_true); init_param(cells, paramz, MZCONFIG_CAN_READ_QUASI, scheme_true);
init_param(cells, paramz, MZCONFIG_READ_DECIMAL_INEXACT, scheme_true); init_param(cells, paramz, MZCONFIG_READ_DECIMAL_INEXACT, scheme_true);
init_param(cells, paramz, MZCONFIG_CAN_READ_READER, scheme_false);
init_param(cells, paramz, MZCONFIG_PRINT_GRAPH, scheme_false); init_param(cells, paramz, MZCONFIG_PRINT_GRAPH, scheme_false);
init_param(cells, paramz, MZCONFIG_PRINT_STRUCT, scheme_false); init_param(cells, paramz, MZCONFIG_PRINT_STRUCT, scheme_false);

View File

@ -133,6 +133,7 @@ scheme_init_type (Scheme_Env *env)
set_name(scheme_proc_struct_type, "<struct>"); set_name(scheme_proc_struct_type, "<struct>");
#endif #endif
set_name(scheme_symbol_type, "<symbol>"); set_name(scheme_symbol_type, "<symbol>");
set_name(scheme_keyword_type, "<keyword>");
set_name(scheme_syntax_compiler_type, "<syntax-compiler>"); set_name(scheme_syntax_compiler_type, "<syntax-compiler>");
set_name(scheme_macro_type, "<macro>"); set_name(scheme_macro_type, "<macro>");
set_name(scheme_lazy_macro_type, "<lazy-macro>"); set_name(scheme_lazy_macro_type, "<lazy-macro>");
@ -149,6 +150,7 @@ scheme_init_type (Scheme_Env *env)
set_name(scheme_multiple_values_type, "<multiple-values>"); set_name(scheme_multiple_values_type, "<multiple-values>");
set_name(scheme_placeholder_type, "<placeholder>"); set_name(scheme_placeholder_type, "<placeholder>");
set_name(scheme_weak_box_type, "<weak-box>"); set_name(scheme_weak_box_type, "<weak-box>");
set_name(scheme_ephemeron_type, "<ephemeron>");
set_name(scheme_rational_type, "<fractional-number>"); set_name(scheme_rational_type, "<fractional-number>");
set_name(scheme_complex_type, "<complex-number>"); set_name(scheme_complex_type, "<complex-number>");
set_name(scheme_complex_izi_type, "<inexactly-real-number>"); set_name(scheme_complex_izi_type, "<inexactly-real-number>");
@ -455,6 +457,7 @@ void scheme_register_traversers(void)
GC_REG_TRAV(scheme_byte_string_type, bstring_obj); GC_REG_TRAV(scheme_byte_string_type, bstring_obj);
GC_REG_TRAV(scheme_path_type, bstring_obj); GC_REG_TRAV(scheme_path_type, bstring_obj);
GC_REG_TRAV(scheme_symbol_type, symbol_obj); GC_REG_TRAV(scheme_symbol_type, symbol_obj);
GC_REG_TRAV(scheme_keyword_type, symbol_obj);
GC_REG_TRAV(scheme_null_type, char_obj); /* small */ GC_REG_TRAV(scheme_null_type, char_obj); /* small */
GC_REG_TRAV(scheme_pair_type, cons_cell); GC_REG_TRAV(scheme_pair_type, cons_cell);
GC_REG_TRAV(scheme_vector_type, vector_obj); GC_REG_TRAV(scheme_vector_type, vector_obj);

View File

@ -293,6 +293,7 @@ class wxFontNameItem : public wxObject
}; };
wxFontNameItem::wxFontNameItem() wxFontNameItem::wxFontNameItem()
: wxObject(WXGC_NO_CLEANUP)
{ {
screen = new wxSuffixMap; screen = new wxSuffixMap;
printing = new wxSuffixMap; printing = new wxSuffixMap;

View File

@ -29,6 +29,10 @@ Authors: John R. Ellis and Jesse Hull
#include <stddef.h> #include <stddef.h>
#include "wxGC.h" #include "wxGC.h"
#ifdef COMPACT_BACKTRACE_GC
# include <stdio.h>
#endif
#ifdef MPW_CPLUS #ifdef MPW_CPLUS
extern "C" { extern "C" {
typedef void (*GC_F_PTR)(void *, void *); typedef void (*GC_F_PTR)(void *, void *);
@ -124,6 +128,15 @@ void GC_cleanup(void *obj, void *)
gc *clean = (gc *)gcPTR_TO_OBJ(obj); gc *clean = (gc *)gcPTR_TO_OBJ(obj);
#ifdef MZ_PRECISE_GC #ifdef MZ_PRECISE_GC
# ifdef COMPACT_BACKTRACE_GC
# if 0
{
char *s;
s = clean->gcGetName();
printf("CLeanup: %s\n", s ? s : "???");
}
# endif
# endif
GC_cpp_delete(clean); GC_cpp_delete(clean);
#else #else
clean->~gc(); clean->~gc();
@ -207,6 +220,11 @@ int GC_is_wx_object(void *v)
# define ZERO_OUT_DISPATCH 1 # define ZERO_OUT_DISPATCH 1
# ifdef COMPACT_BACKTRACE_GC
static char *get_xtagged_name(void *p);
extern char *(*GC_get_xtagged_name)(void *p);
# endif
typedef struct { typedef struct {
short tag; short tag;
short filler_used_for_hashing; short filler_used_for_hashing;
@ -248,6 +266,10 @@ static void initize(void)
GC_mark_xtagged = mark_cpp_object; GC_mark_xtagged = mark_cpp_object;
GC_fixup_xtagged = fixup_cpp_object; GC_fixup_xtagged = fixup_cpp_object;
# ifdef COMPACT_BACKTRACE_GC
GC_get_xtagged_name = get_xtagged_name;
# endif
is_initialized = 1; is_initialized = 1;
} }
@ -271,6 +293,24 @@ void GC_cpp_delete(gc *v)
#endif #endif
} }
# ifdef COMPACT_BACKTRACE_GC
static char name_buffer[256];
static char *get_xtagged_name(void *p)
{
char *s;
s = ((gc *)gcPTR_TO_OBJ(p))->gcGetName();
sprintf(name_buffer, "<%s>", (s ? s : "XTAGGED"));
return name_buffer;
}
char *gc::gcGetName() {
return NULL;
}
# endif
#endif #endif
/**********************************************************************/ /**********************************************************************/

View File

@ -120,6 +120,9 @@ public:
/* Overridden in each subclass: */ /* Overridden in each subclass: */
virtual inline void gcMark(); virtual inline void gcMark();
virtual inline void gcFixup(); virtual inline void gcFixup();
# ifdef COMPACT_BACKTRACE_GC
virtual char *gcGetName();
# endif
#endif #endif
}; };

View File

@ -53,6 +53,9 @@ class wxObject : public gc_cleanup
wxObject(Bool cleanup); wxObject(Bool cleanup);
wxObject(Bool cleanup, WXTYPE t); wxObject(Bool cleanup, WXTYPE t);
virtual ~wxObject(void); virtual ~wxObject(void);
# ifdef COMPACT_BACKTRACE_GC
virtual char *gcGetName();
# endif
}; };
#endif // IN_CPROTO #endif // IN_CPROTO

View File

@ -658,6 +658,7 @@ wxbGauge::~wxbGauge (void)
wbMenuItem::wbMenuItem() wbMenuItem::wbMenuItem()
: wxObject(WXGC_NO_CLEANUP)
{ {
itemId = 0; itemName = NULL; topMenu = NULL; subMenu = NULL; itemId = 0; itemName = NULL; topMenu = NULL; subMenu = NULL;
menuBar = NULL; helpString = NULL; menuBar = NULL; helpString = NULL;

View File

@ -46,3 +46,9 @@ wxObject::~wxObject(void)
--wx_object_count; --wx_object_count;
} }
# ifdef COMPACT_BACKTRACE_GC
char *wxObject::gcGetName()
{
wxGetTypeName(__type);
}
# endif

View File

@ -1217,7 +1217,7 @@ Bool wxCanvasDC::Blit(double xdest, double ydest, double width, double height,
dstbm = GetPortBitMapForCopyBits(theMacGrafPort); dstbm = GetPortBitMapForCopyBits(theMacGrafPort);
srcbm = GetPortBitMapForCopyBits(source->x_pixmap); srcbm = GetPortBitMapForCopyBits(source->x_pixmap);
if (mask) { if (mask && !wxSubType(__type, wxTYPE_DC_PRINTER)) {
const BitMap *maskbm; const BitMap *maskbm;
maskbm = GetPortBitMapForCopyBits(mask->x_pixmap); maskbm = GetPortBitMapForCopyBits(mask->x_pixmap);

View File

@ -24,6 +24,7 @@ wxMenuItem::wxMenuItem
( (
void void
) )
/* wbMenuItem uses WXGC_NO_CLEANUP */
{ {
checkable = FALSE; checkable = FALSE;
cIsChecked = FALSE; cIsChecked = FALSE;
@ -37,6 +38,7 @@ wxMenuItem::wxMenuItem
wxMenu* theParentMenu, wxMenu* theParentMenu,
Bool isCheckable Bool isCheckable
) )
/* wbMenuItem uses WXGC_NO_CLEANUP */
{ {
checkable = isCheckable; checkable = isCheckable;
cIsChecked = FALSE; cIsChecked = FALSE;

View File

@ -48,6 +48,9 @@ class wxObject : public WXGC_CLEANUP_CLASS
wxObject(void); wxObject(void);
wxObject(Bool cleanup); wxObject(Bool cleanup);
virtual ~wxObject(void); virtual ~wxObject(void);
#ifdef COMPACT_BACKTRACE_GC
virtual char *gcGetName();
#endif
}; };

View File

@ -80,6 +80,9 @@ public:
#ifdef MEMORY_USE_METHOD #ifdef MEMORY_USE_METHOD
virtual long MemoryUse(void); virtual long MemoryUse(void);
#endif #endif
#ifdef COMPACT_BACKTRACE_GC
virtual char *gcGetName();
#endif
}; };