Much better debugging, but it still doesn't work
This commit is contained in:
parent
3d5c27cb10
commit
75abfb4050
138
Doxyfile
138
Doxyfile
|
@ -32,13 +32,13 @@ DOXYFILE_ENCODING = UTF-8
|
|||
# title of most generated pages and in a few other places.
|
||||
# The default value is: My Project.
|
||||
|
||||
PROJECT_NAME = "\"Post Scarcity\""
|
||||
PROJECT_NAME = "Post Scarcity"
|
||||
|
||||
# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
|
||||
# could be handy for archiving the generated documentation or if some version
|
||||
# control system is used.
|
||||
|
||||
PROJECT_NUMBER =
|
||||
PROJECT_NUMBER =
|
||||
|
||||
# Using the PROJECT_BRIEF tag one can provide an optional one line description
|
||||
# for a project that appears at the top of each page and should give viewer a
|
||||
|
@ -51,14 +51,14 @@ PROJECT_BRIEF = "A prototype for a post scarcity programming environmen
|
|||
# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy
|
||||
# the logo to the output directory.
|
||||
|
||||
PROJECT_LOGO =
|
||||
PROJECT_LOGO =
|
||||
|
||||
# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
|
||||
# into which the generated documentation will be written. If a relative path is
|
||||
# entered, it will be relative to the location where doxygen was started. If
|
||||
# left blank the current directory will be used.
|
||||
|
||||
OUTPUT_DIRECTORY = /home/simon/workspace/post-scarcity/doc
|
||||
OUTPUT_DIRECTORY = doc
|
||||
|
||||
# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-
|
||||
# directories (in 2 levels) under the output directory of each output format and
|
||||
|
@ -162,7 +162,7 @@ FULL_PATH_NAMES = YES
|
|||
# will be relative from the directory where doxygen is started.
|
||||
# This tag requires that the tag FULL_PATH_NAMES is set to YES.
|
||||
|
||||
STRIP_FROM_PATH =
|
||||
STRIP_FROM_PATH =
|
||||
|
||||
# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
|
||||
# path mentioned in the documentation of a class, which tells the reader which
|
||||
|
@ -171,7 +171,7 @@ STRIP_FROM_PATH =
|
|||
# specify the list of include paths that are normally passed to the compiler
|
||||
# using the -I flag.
|
||||
|
||||
STRIP_FROM_INC_PATH =
|
||||
STRIP_FROM_INC_PATH =
|
||||
|
||||
# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
|
||||
# less readable) file names. This can be useful is your file systems doesn't
|
||||
|
@ -238,13 +238,13 @@ TAB_SIZE = 4
|
|||
# "Side Effects:". You can put \n's in the value part of an alias to insert
|
||||
# newlines.
|
||||
|
||||
ALIASES =
|
||||
ALIASES =
|
||||
|
||||
# This tag can be used to specify a number of word-keyword mappings (TCL only).
|
||||
# A mapping has the form "name=value". For example adding "class=itcl::class"
|
||||
# will allow you to use the command class in the itcl::class meaning.
|
||||
|
||||
TCL_SUBST =
|
||||
TCL_SUBST =
|
||||
|
||||
# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
|
||||
# only. Doxygen will then generate output that is more tailored for C. For
|
||||
|
@ -291,7 +291,7 @@ OPTIMIZE_OUTPUT_VHDL = NO
|
|||
# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
|
||||
# the files are not read by doxygen.
|
||||
|
||||
EXTENSION_MAPPING =
|
||||
EXTENSION_MAPPING =
|
||||
|
||||
# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
|
||||
# according to the Markdown format, which allows for more readable
|
||||
|
@ -648,7 +648,7 @@ GENERATE_DEPRECATEDLIST= YES
|
|||
# sections, marked by \if <section_label> ... \endif and \cond <section_label>
|
||||
# ... \endcond blocks.
|
||||
|
||||
ENABLED_SECTIONS =
|
||||
ENABLED_SECTIONS =
|
||||
|
||||
# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
|
||||
# initial value of a variable or macro / define can have for it to appear in the
|
||||
|
@ -690,7 +690,7 @@ SHOW_NAMESPACES = YES
|
|||
# by doxygen. Whatever the program writes to standard output is used as the file
|
||||
# version. For an example see the documentation.
|
||||
|
||||
FILE_VERSION_FILTER =
|
||||
FILE_VERSION_FILTER =
|
||||
|
||||
# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
|
||||
# by doxygen. The layout file controls the global structure of the generated
|
||||
|
@ -703,7 +703,7 @@ FILE_VERSION_FILTER =
|
|||
# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
|
||||
# tag is left empty.
|
||||
|
||||
LAYOUT_FILE =
|
||||
LAYOUT_FILE =
|
||||
|
||||
# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
|
||||
# the reference definitions. This must be a list of .bib files. The .bib
|
||||
|
@ -713,7 +713,7 @@ LAYOUT_FILE =
|
|||
# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
|
||||
# search path. See also \cite for info how to create references.
|
||||
|
||||
CITE_BIB_FILES =
|
||||
CITE_BIB_FILES =
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to warning and progress messages
|
||||
|
@ -778,7 +778,7 @@ WARN_FORMAT = "$file:$line: $text"
|
|||
# messages should be written. If left blank the output is written to standard
|
||||
# error (stderr).
|
||||
|
||||
WARN_LOGFILE =
|
||||
WARN_LOGFILE = doxy.log
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the input files
|
||||
|
@ -790,7 +790,7 @@ WARN_LOGFILE =
|
|||
# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
|
||||
# Note: If this tag is empty the current directory is searched.
|
||||
|
||||
INPUT = /home/simon/workspace/post-scarcity/src
|
||||
INPUT = src src/arith src/memory src/ops
|
||||
|
||||
# This tag can be used to specify the character encoding of the source files
|
||||
# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
|
||||
|
@ -873,7 +873,7 @@ RECURSIVE = NO
|
|||
# Note that relative paths are relative to the directory from which doxygen is
|
||||
# run.
|
||||
|
||||
EXCLUDE =
|
||||
EXCLUDE =
|
||||
|
||||
# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
|
||||
# directories that are symbolic links (a Unix file system feature) are excluded
|
||||
|
@ -889,7 +889,7 @@ EXCLUDE_SYMLINKS = NO
|
|||
# Note that the wildcards are matched against the file with absolute path, so to
|
||||
# exclude all test directories for example use the pattern */test/*
|
||||
|
||||
EXCLUDE_PATTERNS =
|
||||
EXCLUDE_PATTERNS =
|
||||
|
||||
# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
|
||||
# (namespaces, classes, functions, etc.) that should be excluded from the
|
||||
|
@ -900,13 +900,13 @@ EXCLUDE_PATTERNS =
|
|||
# Note that the wildcards are matched against the file with absolute path, so to
|
||||
# exclude all test directories use the pattern */test/*
|
||||
|
||||
EXCLUDE_SYMBOLS =
|
||||
EXCLUDE_SYMBOLS =
|
||||
|
||||
# The EXAMPLE_PATH tag can be used to specify one or more files or directories
|
||||
# that contain example code fragments that are included (see the \include
|
||||
# command).
|
||||
|
||||
EXAMPLE_PATH =
|
||||
EXAMPLE_PATH =
|
||||
|
||||
# If the value of the EXAMPLE_PATH tag contains directories, you can use the
|
||||
# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
|
||||
|
@ -926,7 +926,7 @@ EXAMPLE_RECURSIVE = NO
|
|||
# that contain images that are to be included in the documentation (see the
|
||||
# \image command).
|
||||
|
||||
IMAGE_PATH =
|
||||
IMAGE_PATH =
|
||||
|
||||
# The INPUT_FILTER tag can be used to specify a program that doxygen should
|
||||
# invoke to filter for each input file. Doxygen will invoke the filter program
|
||||
|
@ -947,7 +947,7 @@ IMAGE_PATH =
|
|||
# need to set EXTENSION_MAPPING for the extension otherwise the files are not
|
||||
# properly processed by doxygen.
|
||||
|
||||
INPUT_FILTER =
|
||||
INPUT_FILTER =
|
||||
|
||||
# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
|
||||
# basis. Doxygen will compare the file name with each pattern and apply the
|
||||
|
@ -960,7 +960,7 @@ INPUT_FILTER =
|
|||
# need to set EXTENSION_MAPPING for the extension otherwise the files are not
|
||||
# properly processed by doxygen.
|
||||
|
||||
FILTER_PATTERNS =
|
||||
FILTER_PATTERNS =
|
||||
|
||||
# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
|
||||
# INPUT_FILTER) will also be used to filter the input files that are used for
|
||||
|
@ -975,14 +975,14 @@ FILTER_SOURCE_FILES = NO
|
|||
# *.ext= (so without naming a filter).
|
||||
# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.
|
||||
|
||||
FILTER_SOURCE_PATTERNS =
|
||||
FILTER_SOURCE_PATTERNS =
|
||||
|
||||
# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that
|
||||
# is part of the input, its contents will be placed on the main page
|
||||
# (index.html). This can be useful if you have a project on for instance GitHub
|
||||
# and want to reuse the introduction page also for the doxygen output.
|
||||
|
||||
USE_MDFILE_AS_MAINPAGE =
|
||||
USE_MDFILE_AS_MAINPAGE =
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to source browsing
|
||||
|
@ -1087,7 +1087,7 @@ CLANG_ASSISTED_PARSING = NO
|
|||
# specified with INPUT and INCLUDE_PATH.
|
||||
# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.
|
||||
|
||||
CLANG_OPTIONS =
|
||||
CLANG_OPTIONS =
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the alphabetical class index
|
||||
|
@ -1113,7 +1113,7 @@ COLS_IN_ALPHA_INDEX = 5
|
|||
# while generating the index headers.
|
||||
# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
|
||||
|
||||
IGNORE_PREFIX =
|
||||
IGNORE_PREFIX =
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the HTML output
|
||||
|
@ -1157,7 +1157,7 @@ HTML_FILE_EXTENSION = .html
|
|||
# of the possible markers and block names see the documentation.
|
||||
# This tag requires that the tag GENERATE_HTML is set to YES.
|
||||
|
||||
HTML_HEADER =
|
||||
HTML_HEADER =
|
||||
|
||||
# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
|
||||
# generated HTML page. If the tag is left blank doxygen will generate a standard
|
||||
|
@ -1167,7 +1167,7 @@ HTML_HEADER =
|
|||
# that doxygen normally uses.
|
||||
# This tag requires that the tag GENERATE_HTML is set to YES.
|
||||
|
||||
HTML_FOOTER =
|
||||
HTML_FOOTER =
|
||||
|
||||
# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
|
||||
# sheet that is used by each HTML page. It can be used to fine-tune the look of
|
||||
|
@ -1179,7 +1179,7 @@ HTML_FOOTER =
|
|||
# obsolete.
|
||||
# This tag requires that the tag GENERATE_HTML is set to YES.
|
||||
|
||||
HTML_STYLESHEET =
|
||||
HTML_STYLESHEET =
|
||||
|
||||
# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
|
||||
# cascading style sheets that are included after the standard style sheets
|
||||
|
@ -1192,7 +1192,7 @@ HTML_STYLESHEET =
|
|||
# list). For an example see the documentation.
|
||||
# This tag requires that the tag GENERATE_HTML is set to YES.
|
||||
|
||||
HTML_EXTRA_STYLESHEET =
|
||||
HTML_EXTRA_STYLESHEET =
|
||||
|
||||
# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
|
||||
# other source files which should be copied to the HTML output directory. Note
|
||||
|
@ -1202,7 +1202,7 @@ HTML_EXTRA_STYLESHEET =
|
|||
# files will be copied as-is; there are no commands or markers available.
|
||||
# This tag requires that the tag GENERATE_HTML is set to YES.
|
||||
|
||||
HTML_EXTRA_FILES =
|
||||
HTML_EXTRA_FILES =
|
||||
|
||||
# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
|
||||
# will adjust the colors in the style sheet and background images according to
|
||||
|
@ -1331,7 +1331,7 @@ GENERATE_HTMLHELP = NO
|
|||
# written to the html output directory.
|
||||
# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
|
||||
|
||||
CHM_FILE =
|
||||
CHM_FILE =
|
||||
|
||||
# The HHC_LOCATION tag can be used to specify the location (absolute path
|
||||
# including file name) of the HTML help compiler (hhc.exe). If non-empty,
|
||||
|
@ -1339,7 +1339,7 @@ CHM_FILE =
|
|||
# The file has to be specified with full path.
|
||||
# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
|
||||
|
||||
HHC_LOCATION =
|
||||
HHC_LOCATION =
|
||||
|
||||
# The GENERATE_CHI flag controls if a separate .chi index file is generated
|
||||
# (YES) or that it should be included in the master .chm file (NO).
|
||||
|
@ -1352,7 +1352,7 @@ GENERATE_CHI = NO
|
|||
# and project file content.
|
||||
# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
|
||||
|
||||
CHM_INDEX_ENCODING =
|
||||
CHM_INDEX_ENCODING =
|
||||
|
||||
# The BINARY_TOC flag controls whether a binary table of contents is generated
|
||||
# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it
|
||||
|
@ -1383,7 +1383,7 @@ GENERATE_QHP = NO
|
|||
# the HTML output folder.
|
||||
# This tag requires that the tag GENERATE_QHP is set to YES.
|
||||
|
||||
QCH_FILE =
|
||||
QCH_FILE =
|
||||
|
||||
# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
|
||||
# Project output. For more information please see Qt Help Project / Namespace
|
||||
|
@ -1408,7 +1408,7 @@ QHP_VIRTUAL_FOLDER = doc
|
|||
# filters).
|
||||
# This tag requires that the tag GENERATE_QHP is set to YES.
|
||||
|
||||
QHP_CUST_FILTER_NAME =
|
||||
QHP_CUST_FILTER_NAME =
|
||||
|
||||
# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
|
||||
# custom filter to add. For more information please see Qt Help Project / Custom
|
||||
|
@ -1416,21 +1416,21 @@ QHP_CUST_FILTER_NAME =
|
|||
# filters).
|
||||
# This tag requires that the tag GENERATE_QHP is set to YES.
|
||||
|
||||
QHP_CUST_FILTER_ATTRS =
|
||||
QHP_CUST_FILTER_ATTRS =
|
||||
|
||||
# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
|
||||
# project's filter section matches. Qt Help Project / Filter Attributes (see:
|
||||
# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes).
|
||||
# This tag requires that the tag GENERATE_QHP is set to YES.
|
||||
|
||||
QHP_SECT_FILTER_ATTRS =
|
||||
QHP_SECT_FILTER_ATTRS =
|
||||
|
||||
# The QHG_LOCATION tag can be used to specify the location of Qt's
|
||||
# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the
|
||||
# generated .qhp file.
|
||||
# This tag requires that the tag GENERATE_QHP is set to YES.
|
||||
|
||||
QHG_LOCATION =
|
||||
QHG_LOCATION =
|
||||
|
||||
# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be
|
||||
# generated, together with the HTML files, they form an Eclipse help plugin. To
|
||||
|
@ -1563,7 +1563,7 @@ MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest
|
|||
# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
|
||||
# This tag requires that the tag USE_MATHJAX is set to YES.
|
||||
|
||||
MATHJAX_EXTENSIONS =
|
||||
MATHJAX_EXTENSIONS =
|
||||
|
||||
# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
|
||||
# of code that will be used on startup of the MathJax code. See the MathJax site
|
||||
|
@ -1571,7 +1571,7 @@ MATHJAX_EXTENSIONS =
|
|||
# example see the documentation.
|
||||
# This tag requires that the tag USE_MATHJAX is set to YES.
|
||||
|
||||
MATHJAX_CODEFILE =
|
||||
MATHJAX_CODEFILE =
|
||||
|
||||
# When the SEARCHENGINE tag is enabled doxygen will generate a search box for
|
||||
# the HTML output. The underlying search engine uses javascript and DHTML and
|
||||
|
@ -1631,7 +1631,7 @@ EXTERNAL_SEARCH = NO
|
|||
# Searching" for details.
|
||||
# This tag requires that the tag SEARCHENGINE is set to YES.
|
||||
|
||||
SEARCHENGINE_URL =
|
||||
SEARCHENGINE_URL =
|
||||
|
||||
# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
|
||||
# search data is written to a file for indexing by an external tool. With the
|
||||
|
@ -1647,7 +1647,7 @@ SEARCHDATA_FILE = searchdata.xml
|
|||
# projects and redirect the results back to the right project.
|
||||
# This tag requires that the tag SEARCHENGINE is set to YES.
|
||||
|
||||
EXTERNAL_SEARCH_ID =
|
||||
EXTERNAL_SEARCH_ID =
|
||||
|
||||
# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
|
||||
# projects other than the one defined by this configuration file, but that are
|
||||
|
@ -1657,7 +1657,7 @@ EXTERNAL_SEARCH_ID =
|
|||
# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
|
||||
# This tag requires that the tag SEARCHENGINE is set to YES.
|
||||
|
||||
EXTRA_SEARCH_MAPPINGS =
|
||||
EXTRA_SEARCH_MAPPINGS =
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the LaTeX output
|
||||
|
@ -1721,7 +1721,7 @@ PAPER_TYPE = a4
|
|||
# If left blank no extra packages will be included.
|
||||
# This tag requires that the tag GENERATE_LATEX is set to YES.
|
||||
|
||||
EXTRA_PACKAGES =
|
||||
EXTRA_PACKAGES =
|
||||
|
||||
# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the
|
||||
# generated LaTeX document. The header should contain everything until the first
|
||||
|
@ -1737,7 +1737,7 @@ EXTRA_PACKAGES =
|
|||
# to HTML_HEADER.
|
||||
# This tag requires that the tag GENERATE_LATEX is set to YES.
|
||||
|
||||
LATEX_HEADER =
|
||||
LATEX_HEADER =
|
||||
|
||||
# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
|
||||
# generated LaTeX document. The footer should contain everything after the last
|
||||
|
@ -1748,7 +1748,7 @@ LATEX_HEADER =
|
|||
# Note: Only use a user-defined footer if you know what you are doing!
|
||||
# This tag requires that the tag GENERATE_LATEX is set to YES.
|
||||
|
||||
LATEX_FOOTER =
|
||||
LATEX_FOOTER =
|
||||
|
||||
# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined
|
||||
# LaTeX style sheets that are included after the standard style sheets created
|
||||
|
@ -1759,7 +1759,7 @@ LATEX_FOOTER =
|
|||
# list).
|
||||
# This tag requires that the tag GENERATE_LATEX is set to YES.
|
||||
|
||||
LATEX_EXTRA_STYLESHEET =
|
||||
LATEX_EXTRA_STYLESHEET =
|
||||
|
||||
# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
|
||||
# other source files which should be copied to the LATEX_OUTPUT output
|
||||
|
@ -1767,7 +1767,7 @@ LATEX_EXTRA_STYLESHEET =
|
|||
# markers available.
|
||||
# This tag requires that the tag GENERATE_LATEX is set to YES.
|
||||
|
||||
LATEX_EXTRA_FILES =
|
||||
LATEX_EXTRA_FILES =
|
||||
|
||||
# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
|
||||
# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will
|
||||
|
@ -1875,14 +1875,14 @@ RTF_HYPERLINKS = NO
|
|||
# default style sheet that doxygen normally uses.
|
||||
# This tag requires that the tag GENERATE_RTF is set to YES.
|
||||
|
||||
RTF_STYLESHEET_FILE =
|
||||
RTF_STYLESHEET_FILE =
|
||||
|
||||
# Set optional variables used in the generation of an RTF document. Syntax is
|
||||
# similar to doxygen's config file. A template extensions file can be generated
|
||||
# using doxygen -e rtf extensionFile.
|
||||
# This tag requires that the tag GENERATE_RTF is set to YES.
|
||||
|
||||
RTF_EXTENSIONS_FILE =
|
||||
RTF_EXTENSIONS_FILE =
|
||||
|
||||
# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code
|
||||
# with syntax highlighting in the RTF output.
|
||||
|
@ -1927,7 +1927,7 @@ MAN_EXTENSION = .3
|
|||
# MAN_EXTENSION with the initial . removed.
|
||||
# This tag requires that the tag GENERATE_MAN is set to YES.
|
||||
|
||||
MAN_SUBDIR =
|
||||
MAN_SUBDIR =
|
||||
|
||||
# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
|
||||
# will generate one additional man file for each entity documented in the real
|
||||
|
@ -2040,7 +2040,7 @@ PERLMOD_PRETTY = YES
|
|||
# overwrite each other's variables.
|
||||
# This tag requires that the tag GENERATE_PERLMOD is set to YES.
|
||||
|
||||
PERLMOD_MAKEVAR_PREFIX =
|
||||
PERLMOD_MAKEVAR_PREFIX =
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the preprocessor
|
||||
|
@ -2081,7 +2081,7 @@ SEARCH_INCLUDES = YES
|
|||
# preprocessor.
|
||||
# This tag requires that the tag SEARCH_INCLUDES is set to YES.
|
||||
|
||||
INCLUDE_PATH =
|
||||
INCLUDE_PATH =
|
||||
|
||||
# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
|
||||
# patterns (like *.h and *.hpp) to filter out the header-files in the
|
||||
|
@ -2089,7 +2089,7 @@ INCLUDE_PATH =
|
|||
# used.
|
||||
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
|
||||
|
||||
INCLUDE_FILE_PATTERNS =
|
||||
INCLUDE_FILE_PATTERNS =
|
||||
|
||||
# The PREDEFINED tag can be used to specify one or more macro names that are
|
||||
# defined before the preprocessor is started (similar to the -D option of e.g.
|
||||
|
@ -2099,7 +2099,7 @@ INCLUDE_FILE_PATTERNS =
|
|||
# recursively expanded use the := operator instead of the = operator.
|
||||
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
|
||||
|
||||
PREDEFINED =
|
||||
PREDEFINED =
|
||||
|
||||
# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
|
||||
# tag can be used to specify a list of macro names that should be expanded. The
|
||||
|
@ -2108,7 +2108,7 @@ PREDEFINED =
|
|||
# definition found in the source code.
|
||||
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
|
||||
|
||||
EXPAND_AS_DEFINED =
|
||||
EXPAND_AS_DEFINED =
|
||||
|
||||
# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
|
||||
# remove all references to function-like macros that are alone on a line, have
|
||||
|
@ -2137,13 +2137,13 @@ SKIP_FUNCTION_MACROS = YES
|
|||
# the path). If a tag file is not located in the directory in which doxygen is
|
||||
# run, you must also specify the path to the tagfile here.
|
||||
|
||||
TAGFILES =
|
||||
TAGFILES =
|
||||
|
||||
# When a file name is specified after GENERATE_TAGFILE, doxygen will create a
|
||||
# tag file that is based on the input files it reads. See section "Linking to
|
||||
# external documentation" for more information about the usage of tag files.
|
||||
|
||||
GENERATE_TAGFILE =
|
||||
GENERATE_TAGFILE =
|
||||
|
||||
# If the ALLEXTERNALS tag is set to YES, all external class will be listed in
|
||||
# the class index. If set to NO, only the inherited external classes will be
|
||||
|
@ -2192,14 +2192,14 @@ CLASS_DIAGRAMS = YES
|
|||
# the mscgen tool resides. If left empty the tool is assumed to be found in the
|
||||
# default search path.
|
||||
|
||||
MSCGEN_PATH =
|
||||
MSCGEN_PATH =
|
||||
|
||||
# You can include diagrams made with dia in doxygen documentation. Doxygen will
|
||||
# then run dia to produce the diagram and insert it in the documentation. The
|
||||
# DIA_PATH tag allows you to specify the directory where the dia binary resides.
|
||||
# If left empty dia is assumed to be found in the default search path.
|
||||
|
||||
DIA_PATH =
|
||||
DIA_PATH =
|
||||
|
||||
# If set to YES the inheritance and collaboration graphs will hide inheritance
|
||||
# and usage relations if the target is undocumented or is not a class.
|
||||
|
@ -2248,7 +2248,7 @@ DOT_FONTSIZE = 10
|
|||
# the path where dot can find it using this tag.
|
||||
# This tag requires that the tag HAVE_DOT is set to YES.
|
||||
|
||||
DOT_FONTPATH =
|
||||
DOT_FONTPATH =
|
||||
|
||||
# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for
|
||||
# each documented class showing the direct and indirect inheritance relations.
|
||||
|
@ -2394,26 +2394,26 @@ INTERACTIVE_SVG = YES
|
|||
# found. If left blank, it is assumed the dot tool can be found in the path.
|
||||
# This tag requires that the tag HAVE_DOT is set to YES.
|
||||
|
||||
DOT_PATH =
|
||||
DOT_PATH =
|
||||
|
||||
# The DOTFILE_DIRS tag can be used to specify one or more directories that
|
||||
# contain dot files that are included in the documentation (see the \dotfile
|
||||
# command).
|
||||
# This tag requires that the tag HAVE_DOT is set to YES.
|
||||
|
||||
DOTFILE_DIRS =
|
||||
DOTFILE_DIRS =
|
||||
|
||||
# The MSCFILE_DIRS tag can be used to specify one or more directories that
|
||||
# contain msc files that are included in the documentation (see the \mscfile
|
||||
# command).
|
||||
|
||||
MSCFILE_DIRS =
|
||||
MSCFILE_DIRS =
|
||||
|
||||
# The DIAFILE_DIRS tag can be used to specify one or more directories that
|
||||
# contain dia files that are included in the documentation (see the \diafile
|
||||
# command).
|
||||
|
||||
DIAFILE_DIRS =
|
||||
DIAFILE_DIRS =
|
||||
|
||||
# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the
|
||||
# path where java can find the plantuml.jar file. If left blank, it is assumed
|
||||
|
@ -2421,17 +2421,17 @@ DIAFILE_DIRS =
|
|||
# generate a warning when it encounters a \startuml command in this case and
|
||||
# will not generate output for the diagram.
|
||||
|
||||
PLANTUML_JAR_PATH =
|
||||
PLANTUML_JAR_PATH =
|
||||
|
||||
# When using plantuml, the PLANTUML_CFG_FILE tag can be used to specify a
|
||||
# configuration file for plantuml.
|
||||
|
||||
PLANTUML_CFG_FILE =
|
||||
PLANTUML_CFG_FILE =
|
||||
|
||||
# When using plantuml, the specified paths are searched for files specified by
|
||||
# the !include statement in a plantuml block.
|
||||
|
||||
PLANTUML_INCLUDE_PATH =
|
||||
PLANTUML_INCLUDE_PATH =
|
||||
|
||||
# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
|
||||
# that will be shown in the graph. If the number of nodes in a graph becomes
|
||||
|
|
2
Makefile
2
Makefile
|
@ -23,7 +23,7 @@ LDFLAGS := -lm
|
|||
$(TARGET): $(OBJS) Makefile
|
||||
$(CC) $(LDFLAGS) $(OBJS) -DVERSION=$(VERSION) -o $@ $(LDFLAGS) $(LOADLIBES) $(LDLIBS)
|
||||
|
||||
doc: $(SRCS) Makefile
|
||||
doc: $(SRCS) Makefile Doxyfile
|
||||
doxygen
|
||||
|
||||
format: $(SRCS) $(HDRS) Makefile
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
|
||||
#include "conspage.h"
|
||||
#include "consspaceobject.h"
|
||||
#include "debug.h"
|
||||
|
||||
/**
|
||||
* return the numeric value of this cell, as a C primitive double, not
|
||||
|
@ -40,9 +41,7 @@ struct cons_pointer make_integer( int64_t value ) {
|
|||
struct cons_space_object *cell = &pointer2cell( result );
|
||||
cell->payload.integer.value = value;
|
||||
|
||||
#ifdef DEBUG
|
||||
dump_object( stderr, result );
|
||||
#endif
|
||||
debug_dump_object( result, DEBUG_ARITH );
|
||||
|
||||
return result;
|
||||
}
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
|
||||
#include "consspaceobject.h"
|
||||
#include "conspage.h"
|
||||
#include "debug.h"
|
||||
#include "equal.h"
|
||||
#include "integer.h"
|
||||
#include "intern.h"
|
||||
|
@ -86,8 +87,8 @@ long double to_long_double( struct cons_pointer arg ) {
|
|||
break;
|
||||
}
|
||||
|
||||
fputws( L"to_long_double( ", stderr );
|
||||
print( stderr, arg );
|
||||
debug_print( L"to_long_double( ", DEBUG_ARITH );
|
||||
debug_print_object( arg, DEBUG_ARITH );
|
||||
fwprintf( stderr, L") => %lf\n", result );
|
||||
|
||||
return result;
|
||||
|
@ -129,13 +130,11 @@ struct cons_pointer add_2( struct stack_frame *frame,
|
|||
struct cons_space_object cell1 = pointer2cell( arg1 );
|
||||
struct cons_space_object cell2 = pointer2cell( arg2 );
|
||||
|
||||
#ifdef DEBUG
|
||||
fputws( L"add_2( arg1 = ", stderr );
|
||||
print( stderr, arg1 );
|
||||
fputws( L"; arg2 = ", stderr );
|
||||
print( stderr, arg2 );
|
||||
fputws( L")\n", stderr );
|
||||
#endif
|
||||
debug_print( L"add_2( arg1 = ", DEBUG_ARITH );
|
||||
debug_print_object( arg1, DEBUG_ARITH );
|
||||
debug_print( L"; arg2 = ", DEBUG_ARITH );
|
||||
debug_print_object( arg2, DEBUG_ARITH );
|
||||
debug_print( L"\n", DEBUG_ARITH );
|
||||
|
||||
if ( zerop( arg1 ) ) {
|
||||
result = arg2;
|
||||
|
@ -209,11 +208,9 @@ struct cons_pointer add_2( struct stack_frame *frame,
|
|||
}
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
fputws( L"}; => ", stderr );
|
||||
print( stderr, arg2 );
|
||||
fputws( L"\n", stderr );
|
||||
#endif
|
||||
debug_print( L"}; => ", DEBUG_ARITH );
|
||||
debug_print_object( arg2, DEBUG_ARITH );
|
||||
debug_print( L"\n", DEBUG_ARITH );
|
||||
|
||||
return result;
|
||||
}
|
||||
|
@ -267,13 +264,11 @@ struct cons_pointer multiply_2( struct stack_frame *frame,
|
|||
struct cons_space_object cell1 = pointer2cell( arg1 );
|
||||
struct cons_space_object cell2 = pointer2cell( arg2 );
|
||||
|
||||
#ifdef DEBUG
|
||||
fputws( L"multiply_2( arg1 = ", stderr );
|
||||
print( stderr, arg1 );
|
||||
fputws( L"; arg2 = ", stderr );
|
||||
print( stderr, arg2 );
|
||||
fputws( L")\n", stderr );
|
||||
#endif
|
||||
debug_print( L"multiply_2( arg1 = ", DEBUG_ARITH );
|
||||
debug_print_object( arg1, DEBUG_ARITH );
|
||||
debug_print( L"; arg2 = ", DEBUG_ARITH );
|
||||
debug_print_object( arg2, DEBUG_ARITH );
|
||||
debug_print( L")", DEBUG_ARITH );
|
||||
|
||||
if ( zerop( arg1 ) ) {
|
||||
result = arg2;
|
||||
|
@ -348,11 +343,9 @@ struct cons_pointer multiply_2( struct stack_frame *frame,
|
|||
}
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
fputws( L" => ", stderr );
|
||||
print( stderr, arg2 );
|
||||
fputws( L"\n", stderr );
|
||||
#endif
|
||||
debug_print( L" => ", DEBUG_ARITH );
|
||||
debug_print_object( arg2, DEBUG_ARITH );
|
||||
debug_print( L"\n", DEBUG_ARITH );
|
||||
|
||||
return result;
|
||||
}
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
|
||||
#include "conspage.h"
|
||||
#include "consspaceobject.h"
|
||||
#include "dump.h"
|
||||
#include "debug.h"
|
||||
#include "equal.h"
|
||||
#include "integer.h"
|
||||
#include "lispops.h"
|
||||
|
@ -332,9 +332,8 @@ struct cons_pointer make_ratio( struct cons_pointer frame_pointer,
|
|||
( "Dividend and divisor of a ratio must be integers" ),
|
||||
frame_pointer );
|
||||
}
|
||||
#ifdef DEBUG
|
||||
dump_object( stderr, result );
|
||||
#endif
|
||||
debug_dump_object( result, DEBUG_ARITH );
|
||||
|
||||
|
||||
return result;
|
||||
}
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
|
||||
#include "conspage.h"
|
||||
#include "consspaceobject.h"
|
||||
#include "dump.h"
|
||||
#include "debug.h"
|
||||
#include "read.h"
|
||||
|
||||
/**
|
||||
|
@ -23,9 +23,7 @@ struct cons_pointer make_real( long double value ) {
|
|||
struct cons_space_object *cell = &pointer2cell( result );
|
||||
cell->payload.real.value = value;
|
||||
|
||||
#ifdef DEBUG
|
||||
dump_object( stderr, result );
|
||||
#endif
|
||||
debug_dump_object( result, DEBUG_ARITH );
|
||||
|
||||
return result;
|
||||
}
|
||||
|
|
65
src/debug.c
Normal file
65
src/debug.c
Normal file
|
@ -0,0 +1,65 @@
|
|||
/**
|
||||
* debug.c
|
||||
*
|
||||
* Better debug log messages.
|
||||
*
|
||||
* (c) 2017 Simon Brooke <simon@journeyman.cc>
|
||||
* Licensed under GPL version 2.0, or, at your option, any later version.
|
||||
*/
|
||||
|
||||
#include <ctype.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
/*
|
||||
* wide characters
|
||||
*/
|
||||
#include <wchar.h>
|
||||
#include <wctype.h>
|
||||
|
||||
#include "consspaceobject.h"
|
||||
#include "debug.h"
|
||||
#include "dump.h"
|
||||
#include "print.h"
|
||||
|
||||
/**
|
||||
* the controlling flags for `debug_print`; set in `init.c`, q.v.
|
||||
*/
|
||||
int verbosity = 0;
|
||||
|
||||
/**
|
||||
* print this debug `message` to stderr, if `verbosity` matches `level`.
|
||||
* `verbosity is a set of flags, see debug_print.h; so you can
|
||||
* turn debugging on for only one part of the system.
|
||||
*/
|
||||
void debug_print( wchar_t *message, int level ) {
|
||||
#ifdef DEBUG
|
||||
if ( level & verbosity ) {
|
||||
fputws( message, stderr );
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* print the object indicated by this `pointer` to stderr, if `verbosity`
|
||||
* matches `level`.`verbosity is a set of flags, see debug_print.h; so you can
|
||||
* turn debugging on for only one part of the system.
|
||||
*/
|
||||
void debug_print_object( struct cons_pointer pointer, int level ) {
|
||||
#ifdef DEBUG
|
||||
if ( level & verbosity ) {
|
||||
print( stderr, pointer );
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* Like `dump_object`, q.v., but protected by the verbosity mechanism.
|
||||
*/
|
||||
void debug_dump_object( struct cons_pointer pointer, int level ) {
|
||||
#ifdef DEBUG
|
||||
if ( level & verbosity ) {
|
||||
dump_object( stderr, pointer );
|
||||
}
|
||||
#endif
|
||||
}
|
28
src/debug.h
Normal file
28
src/debug.h
Normal file
|
@ -0,0 +1,28 @@
|
|||
/**
|
||||
* debug.h
|
||||
*
|
||||
* Better debug log messages.
|
||||
*
|
||||
* (c) 2017 Simon Brooke <simon@journeyman.cc>
|
||||
* Licensed under GPL version 2.0, or, at your option, any later version.
|
||||
*/
|
||||
|
||||
#include <ctype.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#ifndef __debug_print_h
|
||||
#define __debug_print_h
|
||||
|
||||
#define DEBUG_ALLOC 1
|
||||
#define DEBUG_STACK 2
|
||||
#define DEBUG_ARITH 4
|
||||
#define DEBUG_EVAL 8
|
||||
#define DEBUG_LAMBDA 16
|
||||
#define DEBUG_BOOTSTRAP 32
|
||||
#define DEBUG_IO 64
|
||||
|
||||
extern int verbosity;
|
||||
void debug_print( wchar_t *message, int level );
|
||||
void debug_print_object( struct cons_pointer pointer, int level );
|
||||
void debug_dump_object( struct cons_pointer pointer, int level );
|
||||
#endif
|
22
src/init.c
22
src/init.c
|
@ -11,26 +11,32 @@
|
|||
|
||||
#include <stdbool.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <wchar.h>
|
||||
|
||||
#include "version.h"
|
||||
#include "conspage.h"
|
||||
#include "consspaceobject.h"
|
||||
#include "debug.h"
|
||||
#include "intern.h"
|
||||
#include "lispops.h"
|
||||
#include "peano.h"
|
||||
#include "print.h"
|
||||
#include "repl.h"
|
||||
|
||||
// extern char *optarg; /* defined in unistd.h */
|
||||
|
||||
void bind_function( char *name, struct cons_pointer ( *executable )
|
||||
( struct stack_frame *, struct cons_pointer ) ) {
|
||||
( struct stack_frame *,
|
||||
struct cons_pointer, struct cons_pointer ) ) {
|
||||
deep_bind( c_string_to_lisp_symbol( name ),
|
||||
make_function( NIL, executable ) );
|
||||
}
|
||||
|
||||
void bind_special( char *name, struct cons_pointer ( *executable )
|
||||
( struct stack_frame * frame, struct cons_pointer env ) ) {
|
||||
( struct stack_frame *,
|
||||
struct cons_pointer, struct cons_pointer ) ) {
|
||||
deep_bind( c_string_to_lisp_symbol( name ),
|
||||
make_special( NIL, executable ) );
|
||||
}
|
||||
|
@ -46,7 +52,7 @@ int main( int argc, char *argv[] ) {
|
|||
bool dump_at_end = false;
|
||||
bool show_prompt = false;
|
||||
|
||||
while ( ( option = getopt( argc, argv, "pdc" ) ) != -1 ) {
|
||||
while ( ( option = getopt( argc, argv, "pdcv:" ) ) != -1 ) {
|
||||
switch ( option ) {
|
||||
case 'c':
|
||||
print_use_colours = true;
|
||||
|
@ -57,6 +63,8 @@ int main( int argc, char *argv[] ) {
|
|||
case 'p':
|
||||
show_prompt = true;
|
||||
break;
|
||||
case 'v':
|
||||
verbosity = atoi( optarg );
|
||||
default:
|
||||
fwprintf( stderr, L"Unexpected option %c\n", option );
|
||||
break;
|
||||
|
@ -68,9 +76,15 @@ int main( int argc, char *argv[] ) {
|
|||
L"Post scarcity software environment version %s\n\n",
|
||||
VERSION );
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
fputws( L"About to initialise cons pages\n", stderr );
|
||||
#endif
|
||||
initialise_cons_pages( );
|
||||
|
||||
#ifdef DEBUG
|
||||
fputws( L"Initialised cons pages, about to bind\n", stderr );
|
||||
#endif
|
||||
|
||||
/*
|
||||
* privileged variables (keywords)
|
||||
*/
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
|
||||
#include "consspaceobject.h"
|
||||
#include "conspage.h"
|
||||
#include "dump.h"
|
||||
|
||||
/**
|
||||
* Flag indicating whether conspage initialisation has been done.
|
||||
|
@ -168,7 +169,7 @@ void free_cell( struct cons_pointer pointer ) {
|
|||
fwprintf( stderr, L"About to free vector-space object at %ld\n",
|
||||
cell->payload.vectorp.address );
|
||||
#endif
|
||||
free( ( void * ) cell->payload.vectorp.address );
|
||||
//free( ( void * ) cell->payload.vectorp.address );
|
||||
break;
|
||||
|
||||
}
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
* 4294967296.
|
||||
*
|
||||
* Note that this means the total number of addressable cons cells is
|
||||
* 1.8e19, each of 20 bytes; or 3e20 bytes in total; and there are
|
||||
* 1.8e19, each of 20 bytes; or 3e20 bytes in total; and there are
|
||||
* up to a maximum of 4e9 of heap space objects, each of potentially
|
||||
* 4e9 bytes. So we're talking about a potential total of 8e100 bytes
|
||||
* of addressable memory, which is only slightly more than the
|
||||
|
@ -38,7 +38,7 @@ struct cons_page {
|
|||
};
|
||||
|
||||
/**
|
||||
* The (global) pointer to the (global) freelist. Not sure whether this ultimately
|
||||
* The (global) pointer to the (global) freelist. Not sure whether this ultimately
|
||||
* belongs in this file.
|
||||
*/
|
||||
extern struct cons_pointer freelist;
|
||||
|
|
|
@ -133,7 +133,7 @@
|
|||
* A pointer to an object in vector space.
|
||||
*/
|
||||
#define VECTORPOINTTAG "VECP"
|
||||
#define VECTORPOINTTV 0
|
||||
#define VECTORPOINTTV 1346585942
|
||||
/**
|
||||
* An open write stream.
|
||||
*/
|
||||
|
@ -263,9 +263,10 @@
|
|||
* An indirect pointer to a cons cell
|
||||
*/
|
||||
struct cons_pointer {
|
||||
uint32_t page; /* the index of the page on which this cell
|
||||
* resides */
|
||||
uint32_t offset; /* the index of the cell within the page */
|
||||
/** the index of the page on which this cell resides */
|
||||
uint32_t page;
|
||||
/** the index of the cell within the page */
|
||||
uint32_t offset;
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -421,7 +422,7 @@ struct vectorp_payload {
|
|||
* tag. */
|
||||
uint32_t value; /* the tag considered as a number */
|
||||
} tag;
|
||||
struct vector_space_object *address;
|
||||
void *address;
|
||||
/* the address of the actual vector space
|
||||
* object (TODO: will change when I actually
|
||||
* implement vector space) */
|
||||
|
|
9
src/memory/cursor.c
Normal file
9
src/memory/cursor.c
Normal file
|
@ -0,0 +1,9 @@
|
|||
/*
|
||||
* a cursor is a cons-space object which holds:
|
||||
* 1. a pointer to a vector (i.e. a vector-space object which holds an
|
||||
* array of `cons_pointer`);
|
||||
* 2. an integer offset into that array.
|
||||
*
|
||||
* this provides a mechanism for iterating through vectors (actually, in
|
||||
* either direction)
|
||||
*/
|
BIN
src/memory/cursor.h
Normal file
BIN
src/memory/cursor.h
Normal file
Binary file not shown.
|
@ -20,6 +20,7 @@
|
|||
|
||||
#include "conspage.h"
|
||||
#include "consspaceobject.h"
|
||||
#include "debug.h"
|
||||
#include "print.h"
|
||||
#include "stack.h"
|
||||
#include "vectorspace.h"
|
||||
|
@ -111,11 +112,25 @@ void dump_object( FILE * output, struct cons_pointer pointer ) {
|
|||
dump_string_cell( output, L"Symbol", pointer );
|
||||
break;
|
||||
case VECTORPOINTTV:{
|
||||
fwprintf( output,
|
||||
L"\t\tPointer to vector-space object at %p\n",
|
||||
cell.payload.vectorp.address );
|
||||
struct vector_space_object *vso = cell.payload.vectorp.address;
|
||||
fwprintf( output,
|
||||
L"\t\tVector space object of type %4.4s, payload size %d bytes\n",
|
||||
vso->header.tag, vso->header.size );
|
||||
&vso->header.tag.bytes, vso->header.size );
|
||||
switch ( vso->header.tag.value ) {
|
||||
case STACKFRAMETV:
|
||||
dump_frame( output, pointer );
|
||||
break;
|
||||
default:
|
||||
fputws( L"(Unknown vector type)\n", output );
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
fputws( L"(Unknown cons space type)\n", output );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,6 +19,8 @@
|
|||
|
||||
#include "consspaceobject.h"
|
||||
#include "conspage.h"
|
||||
#include "debug.h"
|
||||
#include "dump.h"
|
||||
#include "lispops.h"
|
||||
#include "print.h"
|
||||
#include "stack.h"
|
||||
|
@ -30,21 +32,24 @@
|
|||
*/
|
||||
struct stack_frame *get_stack_frame( struct cons_pointer pointer ) {
|
||||
struct stack_frame *result = NULL;
|
||||
fputws
|
||||
debug_print
|
||||
( L"get_stack_frame: about to get a pointer to the vector space object\n",
|
||||
stderr );
|
||||
DEBUG_ALLOC );
|
||||
struct vector_space_object *vso =
|
||||
pointer2cell( pointer ).payload.vectorp.address;
|
||||
fputws( L"get_stack_frame: got a pointer, about to test it\n", stderr );
|
||||
debug_print( L"get_stack_frame: got a pointer, about to test it\n",
|
||||
DEBUG_ALLOC );
|
||||
|
||||
if ( vectorpointp( pointer ) ) { // && stackframep(vso)){
|
||||
fputws( L"get_stack_frame: pointer is good, about to set the result\n",
|
||||
stderr );
|
||||
if ( vectorpointp( pointer ) && stackframep( vso ) ) {
|
||||
debug_print
|
||||
( L"get_stack_frame: pointer is good, about to set the result\n",
|
||||
DEBUG_ALLOC );
|
||||
|
||||
result = ( struct stack_frame * ) &( vso->payload );
|
||||
fputws( L"get_stack_frame: all good, returning\n", stderr );
|
||||
fwprintf( stderr, L"get_stack_frame: all good, returning %p\n",
|
||||
result );
|
||||
} else {
|
||||
fputws( L"get_stack_frame: fail, returning NULL\n", stderr );
|
||||
debug_print( L"get_stack_frame: fail, returning NULL\n", DEBUG_ALLOC );
|
||||
}
|
||||
|
||||
return result;
|
||||
|
@ -57,11 +62,20 @@ struct stack_frame *get_stack_frame( struct cons_pointer pointer ) {
|
|||
* @return the new frame, or NULL if memory is exhausted.
|
||||
*/
|
||||
struct cons_pointer make_empty_frame( struct cons_pointer previous ) {
|
||||
fputws( L"Entering make_empty_frame\n", stderr );
|
||||
debug_print( L"Entering make_empty_frame\n", DEBUG_ALLOC );
|
||||
struct cons_pointer result =
|
||||
make_vso( STACKFRAMETAG, sizeof( struct stack_frame ) );
|
||||
|
||||
debug_dump_object( result, DEBUG_ALLOC );
|
||||
|
||||
fwprintf( stderr,
|
||||
L"make_empty_frame: got vector_space_object with size %lu, tag %4.4s\n",
|
||||
pointer_to_vso( result )->header.size,
|
||||
&pointer_to_vso( result )->header.tag.bytes );
|
||||
|
||||
if ( !nilp( result ) ) {
|
||||
fputws( L"make_empty_frame: about to call get_stack_frame\n", stderr );
|
||||
debug_print( L"make_empty_frame: about to call get_stack_frame\n",
|
||||
DEBUG_ALLOC );
|
||||
struct stack_frame *frame = get_stack_frame( result );
|
||||
/*
|
||||
* TODO: later, pop a frame off a free-list of stack frames
|
||||
|
@ -69,9 +83,10 @@ struct cons_pointer make_empty_frame( struct cons_pointer previous ) {
|
|||
|
||||
fwprintf( stderr,
|
||||
L"make_empty_frame: about to set previous to %4.4s\n",
|
||||
pointer2cell( previous ).tag );
|
||||
&pointer2cell( previous ).tag.bytes );
|
||||
frame->previous = previous;
|
||||
fputws( L"make_empty_frame: about to call inc_ref\n", stderr );
|
||||
debug_print( L"make_empty_frame: about to call inc_ref\n",
|
||||
DEBUG_ALLOC );
|
||||
inc_ref( previous );
|
||||
|
||||
/*
|
||||
|
@ -82,13 +97,13 @@ struct cons_pointer make_empty_frame( struct cons_pointer previous ) {
|
|||
frame->function = NIL;
|
||||
frame->args = 0;
|
||||
|
||||
fputws( L"make_empty_frame: about to initialise arg registers\n",
|
||||
stderr );
|
||||
debug_print( L"make_empty_frame: about to initialise arg registers\n",
|
||||
DEBUG_ALLOC );
|
||||
for ( int i = 0; i < args_in_frame; i++ ) {
|
||||
set_reg( frame, i, NIL );
|
||||
}
|
||||
}
|
||||
fputws( L"Leaving make_empty_frame\n", stderr );
|
||||
debug_print( L"Leaving make_empty_frame\n", DEBUG_ALLOC );
|
||||
|
||||
return result;
|
||||
}
|
||||
|
@ -104,7 +119,7 @@ struct cons_pointer make_empty_frame( struct cons_pointer previous ) {
|
|||
struct cons_pointer make_stack_frame( struct cons_pointer previous,
|
||||
struct cons_pointer args,
|
||||
struct cons_pointer env ) {
|
||||
fputws( L"Entering make_stack_frame\n", stderr );
|
||||
debug_print( L"Entering make_stack_frame\n", DEBUG_ALLOC );
|
||||
struct cons_pointer result = make_empty_frame( previous );
|
||||
|
||||
if ( nilp( result ) ) {
|
||||
|
@ -164,12 +179,11 @@ struct cons_pointer make_stack_frame( struct cons_pointer previous,
|
|||
frame->more = more;
|
||||
inc_ref( more );
|
||||
}
|
||||
#ifdef DEBUG
|
||||
dump_frame( stderr, result );
|
||||
#endif
|
||||
|
||||
debug_dump_object( result, DEBUG_ALLOC );
|
||||
}
|
||||
}
|
||||
fputws( L"Leaving make_stack_frame\n", stderr );
|
||||
debug_print( L"Leaving make_stack_frame\n", DEBUG_ALLOC );
|
||||
|
||||
return result;
|
||||
}
|
||||
|
@ -185,7 +199,7 @@ struct cons_pointer make_stack_frame( struct cons_pointer previous,
|
|||
struct cons_pointer make_special_frame( struct cons_pointer previous,
|
||||
struct cons_pointer args,
|
||||
struct cons_pointer env ) {
|
||||
fputws( L"Entering make_special_frame\n", stderr );
|
||||
debug_print( L"Entering make_special_frame\n", DEBUG_ALLOC );
|
||||
|
||||
struct cons_pointer result = make_empty_frame( previous );
|
||||
|
||||
|
@ -213,12 +227,11 @@ struct cons_pointer make_special_frame( struct cons_pointer previous,
|
|||
frame->more = args;
|
||||
inc_ref( args );
|
||||
}
|
||||
#ifdef DEBUG
|
||||
dump_frame( stderr, result );
|
||||
#endif
|
||||
|
||||
debug_dump_object( result, DEBUG_ALLOC );
|
||||
}
|
||||
}
|
||||
fputws( L"Leaving make_special_frame\n", stderr );
|
||||
debug_print( L"Leaving make_special_frame\n", DEBUG_ALLOC );
|
||||
|
||||
return result;
|
||||
}
|
||||
|
|
|
@ -33,13 +33,13 @@
|
|||
/**
|
||||
* is this vector-space object a stack frame?
|
||||
*/
|
||||
#define stackframep(vso)(vso->header.tag.value == STACKFRAMETV)
|
||||
#define stackframep(vso)(((struct vector_space_object *)vso)->header.tag.value == STACKFRAMETV)
|
||||
|
||||
/**
|
||||
* set a register in a stack frame. Alwaye use this macro to do so,
|
||||
• because that way we can be sure the inc_ref happens!
|
||||
*/
|
||||
#define set_reg(frame,register,value)frame->arg[register]=value; inc_ref(value)
|
||||
#define set_reg(frame,register,value){frame->arg[register]=value; inc_ref(value);}
|
||||
|
||||
struct stack_frame *get_stack_frame( struct cons_pointer pointer );
|
||||
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
|
||||
#include "conspage.h"
|
||||
#include "consspaceobject.h"
|
||||
#include "dump.h"
|
||||
#include "vectorspace.h"
|
||||
|
||||
|
||||
|
@ -30,19 +31,18 @@
|
|||
* NOTE that `tag` should be the vector-space tag of the particular type of
|
||||
* vector-space object, NOT `VECTORPOINTTAG`.
|
||||
*/
|
||||
struct cons_pointer make_vec_pointer( char *tag,
|
||||
struct vector_space_object *address ) {
|
||||
struct cons_pointer make_vec_pointer( struct vector_space_object *address ) {
|
||||
fputws( L"Entered make_vec_pointer\n", stderr );
|
||||
struct cons_pointer pointer = allocate_cell( VECTORPOINTTAG );
|
||||
struct cons_space_object cell = pointer2cell( pointer );
|
||||
struct cons_space_object *cell = &pointer2cell( pointer );
|
||||
fwprintf( stderr,
|
||||
L"make_vec_pointer: allocated cell, about to write tag '%s'\n",
|
||||
tag );
|
||||
strncpy( &cell.payload.vectorp.tag.bytes[0], tag, 4 );
|
||||
fputws( L"make_vec_pointer: tag written, about to set pointer address\n",
|
||||
stderr );
|
||||
cell.payload.vectorp.address = address;
|
||||
fputws( L"make_vec_pointer: all good, returning\n", stderr );
|
||||
L"make_vec_pointer: tag written, about to set pointer address to %p\n",
|
||||
address );
|
||||
cell->payload.vectorp.address = address;
|
||||
fwprintf( stderr, L"make_vec_pointer: all good, returning pointer to %p\n",
|
||||
cell->payload.vectorp.address );
|
||||
|
||||
dump_object( stderr, pointer );
|
||||
|
||||
return pointer;
|
||||
}
|
||||
|
@ -66,24 +66,32 @@ struct cons_pointer make_vso( char *tag, uint64_t payload_size ) {
|
|||
struct vector_space_object *vso = malloc( padded );
|
||||
|
||||
if ( vso != NULL ) {
|
||||
fwprintf( stderr, L"make_vso: about to write tag '%s'\n", tag );
|
||||
fwprintf( stderr,
|
||||
L"make_vso: about to write tag '%s' into vso at %p\n", tag,
|
||||
vso );
|
||||
strncpy( &vso->header.tag.bytes[0], tag, TAGLENGTH );
|
||||
vso->header.vecp = make_vec_pointer( tag, vso );
|
||||
result = make_vec_pointer( vso );
|
||||
dump_object( stderr, result );
|
||||
vso->header.vecp = result;
|
||||
// memcpy(vso->header.vecp, result, sizeof(struct cons_pointer));
|
||||
|
||||
vso->header.size = payload_size;
|
||||
|
||||
#ifdef DEBUG
|
||||
fwprintf( stderr,
|
||||
L"Allocated vector-space object of type %4.4s, total size %ld, payload size %ld\n",
|
||||
tag, total_size, payload_size );
|
||||
L"Allocated vector-space object of type %4.4s, total size %ld, payload size %ld, at address %p, payload address %p\n",
|
||||
&vso->header.tag.bytes, total_size, vso->header.size, vso,
|
||||
&vso->payload );
|
||||
if ( padded != total_size ) {
|
||||
fwprintf( stderr, L"\t\tPadded from %d to %d\n",
|
||||
total_size, padded );
|
||||
}
|
||||
#endif
|
||||
|
||||
result = vso->header.vecp;
|
||||
}
|
||||
fputws( L"make_vso: all good, returning\n", stderr );
|
||||
#ifdef DEBUG
|
||||
fwprintf( stderr, L"make_vso: all good, returning pointer to %p\n",
|
||||
pointer2cell( result ).payload.vectorp.address );
|
||||
#endif
|
||||
|
||||
return result;
|
||||
}
|
||||
|
|
|
@ -40,7 +40,7 @@
|
|||
#define VECTORTAG "VECT"
|
||||
#define VECTORTV 0
|
||||
|
||||
#define pointer_to_vso(pointer)((vectorpointp(pointer)? pointer2cell(pointer).payload.vectorp.address : NULL))
|
||||
#define pointer_to_vso(pointer)((vectorpointp(pointer)? (struct vector_space_object *) pointer2cell(pointer).payload.vectorp.address : (struct vector_space_object *) NULL))
|
||||
#define vso_get_vecp(vso)((vso->header.vecp))
|
||||
|
||||
struct cons_pointer make_vso( char *tag, uint64_t payload_size );
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
|
||||
#include "conspage.h"
|
||||
#include "consspaceobject.h"
|
||||
#include "debug.h"
|
||||
#include "equal.h"
|
||||
#include "lispops.h"
|
||||
#include "print.h"
|
||||
|
@ -56,22 +57,22 @@ internedp( struct cons_pointer key, struct cons_pointer store ) {
|
|||
struct cons_space_object entry =
|
||||
pointer2cell( pointer2cell( next ).payload.cons.car );
|
||||
|
||||
fputws( L"Internedp: checking whether `", stderr );
|
||||
print( stderr, key );
|
||||
fputws( L"` equals `", stderr );
|
||||
print( stderr, entry.payload.cons.car );
|
||||
fputws( L"`\n", stderr );
|
||||
debug_print( L"Internedp: checking whether `", DEBUG_ALLOC );
|
||||
debug_print_object( key, DEBUG_ALLOC );
|
||||
debug_print( L"` equals `", DEBUG_ALLOC );
|
||||
debug_print_object( entry.payload.cons.car, DEBUG_ALLOC );
|
||||
debug_print( L"`\n", DEBUG_ALLOC );
|
||||
|
||||
if ( equal( key, entry.payload.cons.car ) ) {
|
||||
result = entry.payload.cons.car;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
fputws( L"`", stderr );
|
||||
print( stderr, key );
|
||||
fputws( L"` is a ", stderr );
|
||||
print( stderr, c_type( key ) );
|
||||
fputws( L", not a SYMB", stderr );
|
||||
debug_print( L"`", DEBUG_ALLOC );
|
||||
debug_print_object( key, DEBUG_ALLOC );
|
||||
debug_print( L"` is a ", DEBUG_ALLOC );
|
||||
debug_print_object( c_type( key ), DEBUG_ALLOC );
|
||||
debug_print( L", not a SYMB", DEBUG_ALLOC );
|
||||
}
|
||||
|
||||
return result;
|
||||
|
@ -120,7 +121,17 @@ bind( struct cons_pointer key, struct cons_pointer value,
|
|||
*/
|
||||
struct cons_pointer
|
||||
deep_bind( struct cons_pointer key, struct cons_pointer value ) {
|
||||
debug_print( L"Entering deep_bind\n", DEBUG_ALLOC );
|
||||
debug_print( L"\tSetting ", DEBUG_ALLOC );
|
||||
debug_print_object( key, DEBUG_ALLOC );
|
||||
debug_print( L" to ", DEBUG_ALLOC );
|
||||
debug_print_object( value, DEBUG_ALLOC );
|
||||
debug_print( L"\n", DEBUG_ALLOC );
|
||||
|
||||
oblist = bind( key, value, oblist );
|
||||
|
||||
debug_print( L"Leaving deep_bind\n", DEBUG_ALLOC );
|
||||
|
||||
return oblist;
|
||||
}
|
||||
|
||||
|
|
|
@ -26,6 +26,8 @@
|
|||
|
||||
#include "consspaceobject.h"
|
||||
#include "conspage.h"
|
||||
#include "debug.h"
|
||||
#include "dump.h"
|
||||
#include "equal.h"
|
||||
#include "integer.h"
|
||||
#include "intern.h"
|
||||
|
@ -83,9 +85,8 @@ struct cons_pointer eval_form( struct stack_frame *parent,
|
|||
struct cons_pointer parent_pointer,
|
||||
struct cons_pointer form,
|
||||
struct cons_pointer env ) {
|
||||
fputws( L"eval_form: ", stderr );
|
||||
print( stderr, form );
|
||||
fputws( L"\n", stderr );
|
||||
debug_print( L"eval_form: ", DEBUG_EVAL );
|
||||
debug_dump_object( form, DEBUG_EVAL );
|
||||
|
||||
struct cons_pointer result = NIL;
|
||||
struct cons_pointer next_pointer = make_empty_frame( parent_pointer );
|
||||
|
@ -148,9 +149,8 @@ struct cons_pointer compose_body( struct stack_frame *frame ) {
|
|||
}
|
||||
}
|
||||
|
||||
fputws( L"compose_body returning ", stderr );
|
||||
print( stderr, body );
|
||||
fputws( L"\n", stderr );
|
||||
debug_print( L"compose_body returning ", DEBUG_LAMBDA );
|
||||
debug_dump_object( body, DEBUG_LAMBDA );
|
||||
|
||||
return body;
|
||||
}
|
||||
|
@ -180,13 +180,10 @@ lisp_nlambda( struct stack_frame *frame, struct cons_pointer frame_pointer,
|
|||
}
|
||||
|
||||
void log_binding( struct cons_pointer name, struct cons_pointer val ) {
|
||||
#ifdef DEBUG
|
||||
fputws( L"\n\tBinding ", stderr );
|
||||
print( stderr, name );
|
||||
fputws( L" to ", stderr );
|
||||
print( stderr, val );
|
||||
fputws( L"\"\n", stderr );
|
||||
#endif
|
||||
debug_print( L"\n\tBinding ", DEBUG_ALLOC );
|
||||
debug_dump_object( name, DEBUG_ALLOC );
|
||||
debug_print( L" to ", DEBUG_ALLOC );
|
||||
debug_dump_object( val, DEBUG_ALLOC );
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -236,9 +233,9 @@ eval_lambda( struct cons_space_object cell, struct stack_frame *frame,
|
|||
while ( !nilp( body ) ) {
|
||||
struct cons_pointer sexpr = c_car( body );
|
||||
body = c_cdr( body );
|
||||
#ifdef DEBUG
|
||||
fputws( L"In lambda: ", stderr );
|
||||
#endif
|
||||
|
||||
debug_print( L"In lambda: ", DEBUG_LAMBDA );
|
||||
|
||||
result = eval_form( frame, frame_pointer, sexpr, new_env );
|
||||
}
|
||||
|
||||
|
@ -414,8 +411,8 @@ lisp_eval( struct stack_frame *frame, struct cons_pointer frame_pointer,
|
|||
struct cons_pointer result = frame->arg[0];
|
||||
struct cons_space_object cell = pointer2cell( frame->arg[0] );
|
||||
|
||||
debug_print( L"Eval: ", DEBUG_EVAL );
|
||||
#ifdef DEBUG
|
||||
fputws( L"Eval: ", stderr );
|
||||
dump_frame( stderr, frame_pointer );
|
||||
#endif
|
||||
|
||||
|
@ -455,11 +452,8 @@ lisp_eval( struct stack_frame *frame, struct cons_pointer frame_pointer,
|
|||
break;
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
fputws( L"Eval returning ", stderr );
|
||||
print( stderr, result );
|
||||
fputws( L"\n", stderr );
|
||||
#endif
|
||||
debug_print( L"Eval returning ", DEBUG_EVAL );
|
||||
debug_dump_object( result, DEBUG_EVAL );
|
||||
|
||||
return result;
|
||||
}
|
||||
|
@ -476,7 +470,7 @@ struct cons_pointer
|
|||
lisp_apply( struct stack_frame *frame, struct cons_pointer frame_pointer,
|
||||
struct cons_pointer env ) {
|
||||
#ifdef DEBUG
|
||||
fputws( L"Apply: ", stderr );
|
||||
debug_print( L"Apply: ", DEBUG_EVAL );
|
||||
dump_frame( stderr, frame_pointer );
|
||||
#endif
|
||||
set_reg( frame, 0, make_cons( frame->arg[0], frame->arg[1] ) );
|
||||
|
@ -484,11 +478,8 @@ lisp_apply( struct stack_frame *frame, struct cons_pointer frame_pointer,
|
|||
|
||||
struct cons_pointer result = c_apply( frame, frame_pointer, env );
|
||||
|
||||
#ifdef DEBUG
|
||||
fputws( L"Apply returning ", stderr );
|
||||
print( stderr, result );
|
||||
fputws( L"\n", stderr );
|
||||
#endif
|
||||
debug_print( L"Apply returning ", DEBUG_EVAL );
|
||||
debug_dump_object( result, DEBUG_EVAL );
|
||||
|
||||
return result;
|
||||
}
|
||||
|
@ -690,13 +681,20 @@ lisp_equal( struct stack_frame *frame, struct cons_pointer frame_pointer,
|
|||
struct cons_pointer
|
||||
lisp_read( struct stack_frame *frame, struct cons_pointer frame_pointer,
|
||||
struct cons_pointer env ) {
|
||||
#ifdef DEBUG
|
||||
debug_print( L"entering lisp_read\n", DEBUG_IO );
|
||||
#endif
|
||||
FILE *input = stdin;
|
||||
|
||||
if ( readp( frame->arg[0] ) ) {
|
||||
input = pointer2cell( frame->arg[0] ).payload.stream.stream;
|
||||
}
|
||||
|
||||
return read( frame, frame_pointer, input );
|
||||
struct cons_pointer result = read( frame, frame_pointer, input );
|
||||
debug_print( L"lisp_read returning\n", DEBUG_IO );
|
||||
debug_dump_object( result, DEBUG_IO );
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
|
@ -745,23 +743,22 @@ struct cons_pointer lisp_reverse( struct stack_frame *frame,
|
|||
struct cons_pointer
|
||||
lisp_print( struct stack_frame *frame, struct cons_pointer frame_pointer,
|
||||
struct cons_pointer env ) {
|
||||
#ifdef DEBUG
|
||||
fputws( L"Entering print\n", stderr );
|
||||
#endif
|
||||
debug_print( L"Entering print\n", DEBUG_IO );
|
||||
struct cons_pointer result = NIL;
|
||||
FILE *output = stdout;
|
||||
|
||||
if ( writep( frame->arg[1] ) ) {
|
||||
debug_print( L"lisp_print: setting output stream\n", DEBUG_IO );
|
||||
debug_dump_object( frame->arg[1], DEBUG_IO );
|
||||
output = pointer2cell( frame->arg[1] ).payload.stream.stream;
|
||||
}
|
||||
debug_print( L"lisp_print: about to print\n", DEBUG_IO );
|
||||
debug_dump_object( frame->arg[0], DEBUG_IO );
|
||||
|
||||
result = print( output, frame->arg[0] );
|
||||
|
||||
#ifdef DEBUG
|
||||
fputws( L"Print returning ", stderr );
|
||||
// print( stderr, result );
|
||||
fputws( L"\n", stderr );
|
||||
#endif
|
||||
debug_print( L"lisp_print returning\n", DEBUG_IO );
|
||||
debug_dump_object( result, DEBUG_IO );
|
||||
|
||||
return result;
|
||||
}
|
||||
|
@ -828,8 +825,8 @@ lisp_cond( struct stack_frame *frame, struct cons_pointer frame_pointer,
|
|||
|
||||
for ( int i = 0; i < args_in_frame && !done; i++ ) {
|
||||
struct cons_pointer clause_pointer = frame->arg[i];
|
||||
fputws( L"Cond clause: ", stderr );
|
||||
print( stderr, clause_pointer );
|
||||
debug_print( L"Cond clause: ", DEBUG_EVAL );
|
||||
debug_dump_object( clause_pointer, DEBUG_EVAL );
|
||||
|
||||
if ( consp( clause_pointer ) ) {
|
||||
struct cons_space_object cell = pointer2cell( clause_pointer );
|
||||
|
@ -876,8 +873,8 @@ lisp_cond( struct stack_frame *frame, struct cons_pointer frame_pointer,
|
|||
struct cons_pointer
|
||||
throw_exception( struct cons_pointer message,
|
||||
struct cons_pointer frame_pointer ) {
|
||||
fwprintf( stderr, L"\nERROR: " );
|
||||
print( stderr, message );
|
||||
debug_print( L"\nERROR: ", DEBUG_EVAL );
|
||||
debug_dump_object( message, DEBUG_EVAL );
|
||||
struct cons_pointer result = NIL;
|
||||
|
||||
struct cons_space_object cell = pointer2cell( message );
|
||||
|
|
|
@ -18,6 +18,8 @@
|
|||
#include <wctype.h>
|
||||
|
||||
#include "consspaceobject.h"
|
||||
#include "debug.h"
|
||||
#include "dump.h"
|
||||
#include "integer.h"
|
||||
#include "intern.h"
|
||||
#include "lispops.h"
|
||||
|
@ -59,6 +61,7 @@ struct cons_pointer c_quote( struct cons_pointer arg ) {
|
|||
struct cons_pointer read_continuation( struct stack_frame *frame,
|
||||
struct cons_pointer frame_pointer,
|
||||
FILE * input, wint_t initial ) {
|
||||
debug_print( L"entering read_continuation\n", DEBUG_IO );
|
||||
struct cons_pointer result = NIL;
|
||||
|
||||
wint_t c;
|
||||
|
@ -141,6 +144,8 @@ struct cons_pointer read_continuation( struct stack_frame *frame,
|
|||
break;
|
||||
}
|
||||
}
|
||||
debug_print( L"read_continuation returning\n", DEBUG_IO );
|
||||
debug_dump_object( result, DEBUG_IO );
|
||||
|
||||
return result;
|
||||
}
|
||||
|
@ -154,6 +159,7 @@ struct cons_pointer read_number( struct stack_frame *frame,
|
|||
struct cons_pointer frame_pointer,
|
||||
FILE * input,
|
||||
wint_t initial, bool seen_period ) {
|
||||
debug_print( L"entering read_number\n", DEBUG_IO );
|
||||
struct cons_pointer result = NIL;
|
||||
int64_t accumulator = 0;
|
||||
int64_t dividend = 0;
|
||||
|
@ -210,9 +216,6 @@ struct cons_pointer read_number( struct stack_frame *frame,
|
|||
if ( negative ) {
|
||||
rv = 0 - rv;
|
||||
}
|
||||
#ifdef DEBUG
|
||||
fwprintf( stderr, L"read_numer returning %Lf\n", rv );
|
||||
#endif
|
||||
result = make_real( rv );
|
||||
} else if ( dividend != 0 ) {
|
||||
result =
|
||||
|
@ -225,6 +228,9 @@ struct cons_pointer read_number( struct stack_frame *frame,
|
|||
result = make_integer( accumulator );
|
||||
}
|
||||
|
||||
debug_print( L"read_number returning\n", DEBUG_IO );
|
||||
debug_dump_object( result, DEBUG_IO );
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -248,12 +254,9 @@ struct cons_pointer read_list( struct stack_frame *frame,
|
|||
make_cons( car,
|
||||
read_list( frame, frame_pointer, input,
|
||||
fgetwc( input ) ) );
|
||||
} else {
|
||||
debug_print( L"End of list detected\n", DEBUG_IO );
|
||||
}
|
||||
#ifdef DEBUG
|
||||
else {
|
||||
fwprintf( stderr, L"End of list detected\n" );
|
||||
}
|
||||
#endif
|
||||
|
||||
return result;
|
||||
}
|
||||
|
@ -324,11 +327,8 @@ struct cons_pointer read_symbol( FILE * input, wint_t initial ) {
|
|||
break;
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
fputws( L"Read symbol '", stderr );
|
||||
print( stderr, result );
|
||||
fputws( L"'\n", stderr );
|
||||
#endif
|
||||
debug_print( L"read_symbol returning\n", DEBUG_IO );
|
||||
debug_dump_object( result, DEBUG_IO );
|
||||
|
||||
return result;
|
||||
}
|
||||
|
|
19
src/repl.c
19
src/repl.c
|
@ -13,6 +13,7 @@
|
|||
|
||||
#include "conspage.h"
|
||||
#include "consspaceobject.h"
|
||||
#include "dump.h"
|
||||
#include "intern.h"
|
||||
#include "lispops.h"
|
||||
#include "read.h"
|
||||
|
@ -32,19 +33,25 @@
|
|||
*/
|
||||
struct cons_pointer repl_read( struct cons_pointer stream_pointer ) {
|
||||
struct cons_pointer result = NIL;
|
||||
fputws( L"Entered repl_read\n", stderr );
|
||||
struct cons_pointer frame_pointer = make_empty_frame( NIL );
|
||||
fputws( L"repl_read: got stack_frame pointer\n", stderr );
|
||||
dump_object( stderr, frame_pointer );
|
||||
if ( !nilp( frame_pointer ) ) {
|
||||
inc_ref( frame_pointer );
|
||||
struct stack_frame *frame = get_stack_frame( frame_pointer );
|
||||
|
||||
if ( frame != NULL ) {
|
||||
|
||||
fputws( L"repl_read: about to set register\n", stderr );
|
||||
set_reg( frame, 0, stream_pointer );
|
||||
fputws( L"repl_read: about to read\n", stderr );
|
||||
struct cons_pointer result =
|
||||
lisp_read( frame, frame_pointer, oblist );
|
||||
}
|
||||
dec_ref( frame_pointer );
|
||||
}
|
||||
fputws( L"repl_read: returning\n", stderr );
|
||||
dump_object( stderr, result );
|
||||
|
||||
return result;
|
||||
}
|
||||
|
@ -53,6 +60,7 @@ struct cons_pointer repl_read( struct cons_pointer stream_pointer ) {
|
|||
* Dummy up a Lisp eval call with its own stack frame.
|
||||
*/
|
||||
struct cons_pointer repl_eval( struct cons_pointer input ) {
|
||||
fputws( L"Entered repl_eval\n", stderr );
|
||||
struct cons_pointer result = NIL;
|
||||
struct cons_pointer frame_pointer = make_empty_frame( NIL );
|
||||
if ( !nilp( frame_pointer ) ) {
|
||||
|
@ -66,6 +74,8 @@ struct cons_pointer repl_eval( struct cons_pointer input ) {
|
|||
|
||||
dec_ref( frame_pointer );
|
||||
}
|
||||
fputws( L"repl_eval: returning\n", stderr );
|
||||
dump_object( stderr, result );
|
||||
|
||||
return result;
|
||||
}
|
||||
|
@ -75,6 +85,7 @@ struct cons_pointer repl_eval( struct cons_pointer input ) {
|
|||
*/
|
||||
struct cons_pointer repl_print( struct cons_pointer stream_pointer,
|
||||
struct cons_pointer value ) {
|
||||
|
||||
struct cons_pointer result = NIL;
|
||||
struct cons_pointer frame_pointer = make_empty_frame( NIL );
|
||||
if ( !nilp( frame_pointer ) ) {
|
||||
|
@ -102,12 +113,12 @@ struct cons_pointer repl_print( struct cons_pointer stream_pointer,
|
|||
void
|
||||
repl( FILE * in_stream, FILE * out_stream, FILE * error_stream,
|
||||
bool show_prompt ) {
|
||||
fputws( L"Entered repl\n", stderr );
|
||||
struct cons_pointer input_stream = make_read_stream( in_stream );
|
||||
pointer2cell( input_stream ).count = MAXREFERENCE;
|
||||
inc_ref( input_stream );
|
||||
|
||||
struct cons_pointer output_stream = make_write_stream( out_stream );
|
||||
pointer2cell( output_stream ).count = MAXREFERENCE;
|
||||
|
||||
inc_ref( output_stream );
|
||||
while ( !feof( pointer2cell( input_stream ).payload.stream.stream ) ) {
|
||||
if ( show_prompt ) {
|
||||
fwprintf( out_stream, L"\n:: " );
|
||||
|
|
Loading…
Reference in a new issue