Merge branch 'idea-kotlin' into 'master'
Convert to intellij and kotlin See merge request mike-cifelli/transcendental-lisp!1
This commit is contained in:
commit
04a4164c1b
31
.classpath
31
.classpath
|
@ -1,31 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<classpath>
|
|
||||||
<classpathentry kind="src" output="target/classes" path="src">
|
|
||||||
<attributes>
|
|
||||||
<attribute name="optional" value="true"/>
|
|
||||||
<attribute name="maven.pomderived" value="true"/>
|
|
||||||
</attributes>
|
|
||||||
</classpathentry>
|
|
||||||
<classpathentry including="**/*.java" kind="src" output="target/test-classes" path="test">
|
|
||||||
<attributes>
|
|
||||||
<attribute name="optional" value="true"/>
|
|
||||||
<attribute name="maven.pomderived" value="true"/>
|
|
||||||
</attributes>
|
|
||||||
</classpathentry>
|
|
||||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
|
|
||||||
<attributes>
|
|
||||||
<attribute name="maven.pomderived" value="true"/>
|
|
||||||
</attributes>
|
|
||||||
</classpathentry>
|
|
||||||
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
|
|
||||||
<attributes>
|
|
||||||
<attribute name="maven.pomderived" value="true"/>
|
|
||||||
</attributes>
|
|
||||||
</classpathentry>
|
|
||||||
<classpathentry excluding="**" kind="src" output="target/classes" path="lisp/lang">
|
|
||||||
<attributes>
|
|
||||||
<attribute name="maven.pomderived" value="true"/>
|
|
||||||
</attributes>
|
|
||||||
</classpathentry>
|
|
||||||
<classpathentry kind="output" path="target/classes"/>
|
|
||||||
</classpath>
|
|
|
@ -1,7 +1,12 @@
|
||||||
|
.idea/**/libraries
|
||||||
|
.idea/**/tasks.xml
|
||||||
|
.idea/**/workspace.xml
|
||||||
|
.idea/dictionaries
|
||||||
fitnesse/FitNesseRoot/files
|
fitnesse/FitNesseRoot/files
|
||||||
fitnesse/FitNesseRoot/FitNesse/UserGuide/
|
fitnesse/FitNesseRoot/FitNesse/UserGuide/
|
||||||
fitnesse/fitnesse-results
|
fitnesse/fitnesse-results
|
||||||
target/
|
target/
|
||||||
|
*.iml
|
||||||
*.swp
|
*.swp
|
||||||
*.zip
|
*.zip
|
||||||
dependency-reduced-pom.xml
|
dependency-reduced-pom.xml
|
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ClojureProjectResolveSettings">
|
||||||
|
<currentScheme>IDE</currentScheme>
|
||||||
|
</component>
|
||||||
|
</project>
|
|
@ -0,0 +1,92 @@
|
||||||
|
<component name="ProjectCodeStyleConfiguration">
|
||||||
|
<code_scheme name="Project" version="173">
|
||||||
|
<JavaCodeStyleSettings>
|
||||||
|
<option name="DO_NOT_WRAP_AFTER_SINGLE_ANNOTATION" value="true" />
|
||||||
|
<option name="ANNOTATION_PARAMETER_WRAP" value="5" />
|
||||||
|
<option name="ALIGN_MULTILINE_ANNOTATION_PARAMETERS" value="true" />
|
||||||
|
<option name="CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND" value="99" />
|
||||||
|
<option name="NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND" value="99" />
|
||||||
|
<option name="IMPORT_LAYOUT_TABLE">
|
||||||
|
<value>
|
||||||
|
<emptyLine />
|
||||||
|
<package name="" withSubpackages="true" static="false" />
|
||||||
|
<emptyLine />
|
||||||
|
<package name="javax" withSubpackages="true" static="false" />
|
||||||
|
<package name="java" withSubpackages="true" static="false" />
|
||||||
|
<emptyLine />
|
||||||
|
<package name="" withSubpackages="true" static="true" />
|
||||||
|
</value>
|
||||||
|
</option>
|
||||||
|
</JavaCodeStyleSettings>
|
||||||
|
<JetCodeStyleSettings>
|
||||||
|
<option name="PACKAGES_TO_USE_STAR_IMPORTS">
|
||||||
|
<value />
|
||||||
|
</option>
|
||||||
|
<option name="ALIGN_IN_COLUMNS_CASE_BRANCH" value="true" />
|
||||||
|
<option name="NAME_COUNT_TO_USE_STAR_IMPORT" value="2147483647" />
|
||||||
|
<option name="NAME_COUNT_TO_USE_STAR_IMPORT_FOR_MEMBERS" value="2147483647" />
|
||||||
|
<option name="IMPORT_NESTED_CLASSES" value="true" />
|
||||||
|
<option name="CONTINUATION_INDENT_FOR_EXPRESSION_BODIES" value="false" />
|
||||||
|
<option name="CONTINUATION_INDENT_FOR_CHAINED_CALLS" value="false" />
|
||||||
|
<option name="WRAP_EXPRESSION_BODY_FUNCTIONS" value="1" />
|
||||||
|
</JetCodeStyleSettings>
|
||||||
|
<XML>
|
||||||
|
<option name="XML_ATTRIBUTE_WRAP" value="4" />
|
||||||
|
<option name="XML_KEEP_BLANK_LINES" value="1" />
|
||||||
|
<option name="XML_SPACE_INSIDE_EMPTY_TAG" value="true" />
|
||||||
|
</XML>
|
||||||
|
<codeStyleSettings language="JAVA">
|
||||||
|
<option name="KEEP_FIRST_COLUMN_COMMENT" value="false" />
|
||||||
|
<option name="KEEP_BLANK_LINES_IN_DECLARATIONS" value="1" />
|
||||||
|
<option name="KEEP_BLANK_LINES_IN_CODE" value="1" />
|
||||||
|
<option name="KEEP_BLANK_LINES_BEFORE_RBRACE" value="0" />
|
||||||
|
<option name="BLANK_LINES_AFTER_CLASS_HEADER" value="1" />
|
||||||
|
<option name="ALIGN_MULTILINE_CHAINED_METHODS" value="true" />
|
||||||
|
<option name="ALIGN_MULTILINE_PARAMETERS_IN_CALLS" value="true" />
|
||||||
|
<option name="ALIGN_MULTILINE_BINARY_OPERATION" value="true" />
|
||||||
|
<option name="ALIGN_MULTILINE_TERNARY_OPERATION" value="true" />
|
||||||
|
<option name="ALIGN_MULTILINE_EXTENDS_LIST" value="true" />
|
||||||
|
<option name="ALIGN_MULTILINE_ARRAY_INITIALIZER_EXPRESSION" value="true" />
|
||||||
|
<option name="SPACE_WITHIN_ARRAY_INITIALIZER_BRACES" value="true" />
|
||||||
|
<option name="SPACE_BEFORE_ARRAY_INITIALIZER_LBRACE" value="true" />
|
||||||
|
<option name="CALL_PARAMETERS_WRAP" value="5" />
|
||||||
|
<option name="METHOD_PARAMETERS_WRAP" value="5" />
|
||||||
|
<option name="RESOURCE_LIST_WRAP" value="5" />
|
||||||
|
<option name="EXTENDS_LIST_WRAP" value="5" />
|
||||||
|
<option name="THROWS_LIST_WRAP" value="5" />
|
||||||
|
<option name="EXTENDS_KEYWORD_WRAP" value="1" />
|
||||||
|
<option name="THROWS_KEYWORD_WRAP" value="1" />
|
||||||
|
<option name="METHOD_CALL_CHAIN_WRAP" value="5" />
|
||||||
|
<option name="BINARY_OPERATION_WRAP" value="5" />
|
||||||
|
<option name="TERNARY_OPERATION_WRAP" value="1" />
|
||||||
|
<option name="TERNARY_OPERATION_SIGNS_ON_NEXT_LINE" value="true" />
|
||||||
|
<option name="KEEP_SIMPLE_METHODS_IN_ONE_LINE" value="true" />
|
||||||
|
<option name="KEEP_SIMPLE_LAMBDAS_IN_ONE_LINE" value="true" />
|
||||||
|
<option name="KEEP_SIMPLE_CLASSES_IN_ONE_LINE" value="true" />
|
||||||
|
<option name="FOR_STATEMENT_WRAP" value="5" />
|
||||||
|
<option name="ARRAY_INITIALIZER_WRAP" value="5" />
|
||||||
|
<option name="ASSIGNMENT_WRAP" value="1" />
|
||||||
|
<option name="ENUM_CONSTANTS_WRAP" value="5" />
|
||||||
|
</codeStyleSettings>
|
||||||
|
<codeStyleSettings language="XML">
|
||||||
|
<indentOptions>
|
||||||
|
<option name="INDENT_SIZE" value="2" />
|
||||||
|
</indentOptions>
|
||||||
|
</codeStyleSettings>
|
||||||
|
<codeStyleSettings language="kotlin">
|
||||||
|
<option name="KEEP_FIRST_COLUMN_COMMENT" value="false" />
|
||||||
|
<option name="KEEP_BLANK_LINES_IN_DECLARATIONS" value="1" />
|
||||||
|
<option name="KEEP_BLANK_LINES_IN_CODE" value="1" />
|
||||||
|
<option name="KEEP_BLANK_LINES_BEFORE_RBRACE" value="0" />
|
||||||
|
<option name="ALIGN_MULTILINE_PARAMETERS_IN_CALLS" value="true" />
|
||||||
|
<option name="ALIGN_MULTILINE_EXTENDS_LIST" value="true" />
|
||||||
|
<option name="CALL_PARAMETERS_WRAP" value="5" />
|
||||||
|
<option name="METHOD_PARAMETERS_WRAP" value="5" />
|
||||||
|
<option name="EXTENDS_LIST_WRAP" value="5" />
|
||||||
|
<option name="METHOD_CALL_CHAIN_WRAP" value="5" />
|
||||||
|
<option name="ASSIGNMENT_WRAP" value="1" />
|
||||||
|
<option name="FIELD_ANNOTATION_WRAP" value="1" />
|
||||||
|
<option name="ENUM_CONSTANTS_WRAP" value="5" />
|
||||||
|
</codeStyleSettings>
|
||||||
|
</code_scheme>
|
||||||
|
</component>
|
|
@ -0,0 +1,5 @@
|
||||||
|
<component name="ProjectCodeStyleConfiguration">
|
||||||
|
<state>
|
||||||
|
<option name="PREFERRED_PROJECT_CODE_STYLE" value="Mike" />
|
||||||
|
</state>
|
||||||
|
</component>
|
|
@ -0,0 +1,16 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="CompilerConfiguration">
|
||||||
|
<annotationProcessing>
|
||||||
|
<profile name="Maven default annotation processors profile" enabled="true">
|
||||||
|
<sourceOutputDir name="target/generated-sources/annotations" />
|
||||||
|
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
|
||||||
|
<outputRelativeToContentRoot value="true" />
|
||||||
|
<module name="transcendental-lisp" />
|
||||||
|
</profile>
|
||||||
|
</annotationProcessing>
|
||||||
|
<bytecodeTargetLevel>
|
||||||
|
<module name="transcendental-lisp" target="1.8" />
|
||||||
|
</bytecodeTargetLevel>
|
||||||
|
</component>
|
||||||
|
</project>
|
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="Encoding">
|
||||||
|
<file url="file://$PROJECT_DIR$" charset="UTF-8" />
|
||||||
|
</component>
|
||||||
|
</project>
|
|
@ -0,0 +1,6 @@
|
||||||
|
<component name="InspectionProjectProfileManager">
|
||||||
|
<profile version="1.0">
|
||||||
|
<option name="myName" value="Project Default" />
|
||||||
|
<inspection_tool class="RemoveRedundantBackticks" enabled="false" level="WARNING" enabled_by_default="false" />
|
||||||
|
</profile>
|
||||||
|
</component>
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="Kotlin2JsCompilerArguments">
|
||||||
|
<option name="sourceMapEmbedSources" />
|
||||||
|
<option name="sourceMapPrefix" />
|
||||||
|
</component>
|
||||||
|
</project>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="MavenProjectsManager">
|
||||||
|
<option name="originalFiles">
|
||||||
|
<list>
|
||||||
|
<option value="$PROJECT_DIR$/pom.xml" />
|
||||||
|
</list>
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK">
|
||||||
|
<output url="file://$PROJECT_DIR$/classes" />
|
||||||
|
</component>
|
||||||
|
</project>
|
|
@ -0,0 +1,8 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/transcendental-lisp.iml" filepath="$PROJECT_DIR$/transcendental-lisp.iml" />
|
||||||
|
</modules>
|
||||||
|
</component>
|
||||||
|
</project>
|
|
@ -0,0 +1,27 @@
|
||||||
|
<component name="ProjectRunConfigurationManager">
|
||||||
|
<configuration default="false" name="Build" type="MavenRunConfiguration" factoryName="Maven">
|
||||||
|
<MavenSettings>
|
||||||
|
<option name="myGeneralSettings" />
|
||||||
|
<option name="myRunnerSettings" />
|
||||||
|
<option name="myRunnerParameters">
|
||||||
|
<MavenRunnerParameters>
|
||||||
|
<option name="profiles">
|
||||||
|
<set />
|
||||||
|
</option>
|
||||||
|
<option name="goals">
|
||||||
|
<list>
|
||||||
|
<option value="clean" />
|
||||||
|
<option value="verify" />
|
||||||
|
</list>
|
||||||
|
</option>
|
||||||
|
<option name="profilesMap">
|
||||||
|
<map />
|
||||||
|
</option>
|
||||||
|
<option name="resolveToWorkspace" value="false" />
|
||||||
|
<option name="workingDirPath" value="$PROJECT_DIR$" />
|
||||||
|
</MavenRunnerParameters>
|
||||||
|
</option>
|
||||||
|
</MavenSettings>
|
||||||
|
<method />
|
||||||
|
</configuration>
|
||||||
|
</component>
|
|
@ -0,0 +1,11 @@
|
||||||
|
<component name="ProjectRunConfigurationManager">
|
||||||
|
<configuration default="false" name="FitNesse" type="JarApplication" factoryName="JAR Application" singleton="true">
|
||||||
|
<extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
|
||||||
|
<option name="JAR_PATH" value="$PROJECT_DIR$/fitnesse/fitnesse-standalone.jar" />
|
||||||
|
<option name="PROGRAM_PARAMETERS" value="-p 5150 -d fitnesse" />
|
||||||
|
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
|
||||||
|
<option name="ALTERNATIVE_JRE_PATH" />
|
||||||
|
<envs />
|
||||||
|
<method />
|
||||||
|
</configuration>
|
||||||
|
</component>
|
|
@ -0,0 +1,24 @@
|
||||||
|
<component name="ProjectRunConfigurationManager">
|
||||||
|
<configuration default="false" name="Test" type="JUnit" factoryName="JUnit">
|
||||||
|
<extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
|
||||||
|
<module name="transcendental-lisp" />
|
||||||
|
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
|
||||||
|
<option name="ALTERNATIVE_JRE_PATH" />
|
||||||
|
<option name="PACKAGE_NAME" value="" />
|
||||||
|
<option name="MAIN_CLASS_NAME" value="" />
|
||||||
|
<option name="METHOD_NAME" value="" />
|
||||||
|
<option name="TEST_OBJECT" value="package" />
|
||||||
|
<option name="VM_PARAMETERS" value="-ea" />
|
||||||
|
<option name="PARAMETERS" value="" />
|
||||||
|
<option name="WORKING_DIRECTORY" value="file://%MODULE_WORKING_DIR%" />
|
||||||
|
<option name="ENV_VARIABLES" />
|
||||||
|
<option name="PASS_PARENT_ENVS" value="true" />
|
||||||
|
<option name="TEST_SEARCH_SCOPE">
|
||||||
|
<value defaultName="singleModule" />
|
||||||
|
</option>
|
||||||
|
<envs />
|
||||||
|
<dir value="$PROJECT_DIR$/src/test/java" />
|
||||||
|
<patterns />
|
||||||
|
<method />
|
||||||
|
</configuration>
|
||||||
|
</component>
|
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
29
.project
29
.project
|
@ -1,29 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<projectDescription>
|
|
||||||
<name>Transcendental Lisp</name>
|
|
||||||
<comment></comment>
|
|
||||||
<projects>
|
|
||||||
</projects>
|
|
||||||
<buildSpec>
|
|
||||||
<buildCommand>
|
|
||||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
<buildCommand>
|
|
||||||
<name>org.eclipse.wst.common.project.facet.core.builder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
<buildCommand>
|
|
||||||
<name>org.eclipse.m2e.core.maven2Builder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
</buildSpec>
|
|
||||||
<natures>
|
|
||||||
<nature>org.eclipse.m2e.core.maven2Nature</nature>
|
|
||||||
<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
|
|
||||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
|
||||||
</natures>
|
|
||||||
</projectDescription>
|
|
|
@ -1,6 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<launchConfiguration type="org.eclipse.ui.externaltools.ProgramLaunchConfigurationType">
|
|
||||||
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="/usr/bin/java"/>
|
|
||||||
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS" value="-jar fitnesse/fitnesse-standalone.jar -p 5150 -d fitnesse"/>
|
|
||||||
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="${workspace_loc:/Transcendental Lisp}"/>
|
|
||||||
</launchConfiguration>
|
|
|
@ -1,21 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<launchConfiguration type="org.eclipse.jdt.junit.launchconfig">
|
|
||||||
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
|
|
||||||
<listEntry value="/Transcendental Lisp"/>
|
|
||||||
</listAttribute>
|
|
||||||
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
|
|
||||||
<listEntry value="4"/>
|
|
||||||
</listAttribute>
|
|
||||||
<listAttribute key="org.eclipse.eclemma.core.SCOPE_IDS">
|
|
||||||
<listEntry value="=Transcendental Lisp/src"/>
|
|
||||||
</listAttribute>
|
|
||||||
<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value="=Transcendental Lisp"/>
|
|
||||||
<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
|
|
||||||
<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/>
|
|
||||||
<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
|
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.m2e.launchconfig.classpathProvider"/>
|
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value=""/>
|
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="Transcendental Lisp"/>
|
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.m2e.launchconfig.sourcepathProvider"/>
|
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-ea"/>
|
|
||||||
</launchConfiguration>
|
|
|
@ -1,16 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<launchConfiguration type="org.eclipse.m2e.Maven2LaunchConfigurationType">
|
|
||||||
<booleanAttribute key="M2_DEBUG_OUTPUT" value="false"/>
|
|
||||||
<stringAttribute key="M2_GOALS" value="clean verify"/>
|
|
||||||
<booleanAttribute key="M2_NON_RECURSIVE" value="false"/>
|
|
||||||
<booleanAttribute key="M2_OFFLINE" value="false"/>
|
|
||||||
<stringAttribute key="M2_PROFILES" value=""/>
|
|
||||||
<listAttribute key="M2_PROPERTIES"/>
|
|
||||||
<stringAttribute key="M2_RUNTIME" value="EMBEDDED"/>
|
|
||||||
<booleanAttribute key="M2_SKIP_TESTS" value="false"/>
|
|
||||||
<intAttribute key="M2_THREADS" value="1"/>
|
|
||||||
<booleanAttribute key="M2_UPDATE_SNAPSHOTS" value="false"/>
|
|
||||||
<stringAttribute key="M2_USER_SETTINGS" value=""/>
|
|
||||||
<booleanAttribute key="M2_WORKSPACE_RESOLUTION" value="false"/>
|
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${project_loc:Transcendental Lisp}"/>
|
|
||||||
</launchConfiguration>
|
|
|
@ -1,5 +0,0 @@
|
||||||
eclipse.preferences.version=1
|
|
||||||
encoding//lisp/lang=UTF-8
|
|
||||||
encoding/<project>=UTF-8
|
|
||||||
encoding/src=UTF-8
|
|
||||||
encoding/test=UTF-8
|
|
|
@ -1,13 +0,0 @@
|
||||||
eclipse.preferences.version=1
|
|
||||||
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
|
|
||||||
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
|
|
||||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
|
|
||||||
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
|
|
||||||
org.eclipse.jdt.core.compiler.compliance=1.8
|
|
||||||
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
|
|
||||||
org.eclipse.jdt.core.compiler.debug.localVariable=generate
|
|
||||||
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
|
|
||||||
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
|
|
||||||
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
|
|
||||||
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
|
|
||||||
org.eclipse.jdt.core.compiler.source=1.8
|
|
|
@ -1,4 +0,0 @@
|
||||||
activeProfiles=
|
|
||||||
eclipse.preferences.version=1
|
|
||||||
resolveWorkspaceProjects=true
|
|
||||||
version=1
|
|
145
pom.xml
145
pom.xml
|
@ -1,7 +1,6 @@
|
||||||
<project
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
xmlns="http://maven.apache.org/POM/4.0.0"
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
|
||||||
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
@ -9,24 +8,17 @@
|
||||||
<artifactId>transcendental-lisp</artifactId>
|
<artifactId>transcendental-lisp</artifactId>
|
||||||
<version>1.2.0</version>
|
<version>1.2.0</version>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
<kotlin.version>1.2.30</kotlin.version>
|
||||||
|
<junit5.version>5.1.0</junit5.version>
|
||||||
|
<skipTests>false</skipTests>
|
||||||
|
</properties>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
<sourceDirectory>src</sourceDirectory>
|
<!-- TODO - when everything is converted to kotlin -->
|
||||||
<testSourceDirectory>test</testSourceDirectory>
|
<!--<sourceDirectory>${project.basedir}/src/main/kotlin</sourceDirectory>-->
|
||||||
|
<!--<testSourceDirectory>${project.basedir}/src/test/kotlin</testSourceDirectory>-->
|
||||||
<resources>
|
|
||||||
<resource>
|
|
||||||
<directory>lisp/lang</directory>
|
|
||||||
</resource>
|
|
||||||
</resources>
|
|
||||||
|
|
||||||
<testResources>
|
|
||||||
<testResource>
|
|
||||||
<directory>test</directory>
|
|
||||||
<excludes>
|
|
||||||
<exclude>**/*.java</exclude>
|
|
||||||
</excludes>
|
|
||||||
</testResource>
|
|
||||||
</testResources>
|
|
||||||
|
|
||||||
<plugins>
|
<plugins>
|
||||||
<plugin>
|
<plugin>
|
||||||
|
@ -41,10 +33,62 @@
|
||||||
<version>3.0.2</version>
|
<version>3.0.2</version>
|
||||||
</plugin>
|
</plugin>
|
||||||
|
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.jetbrains.kotlin</groupId>
|
||||||
|
<artifactId>kotlin-maven-plugin</artifactId>
|
||||||
|
<version>${kotlin.version}</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>compile</id>
|
||||||
|
<phase>compile</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>compile</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
<execution>
|
||||||
|
<id>test-compile</id>
|
||||||
|
<phase>test-compile</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>test-compile</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
<configuration>
|
||||||
|
<jvmTarget>1.8</jvmTarget>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
|
<!-- TODO - remove when everything is converted to kotlin -->
|
||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-compiler-plugin</artifactId>
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
<version>3.7.0</version>
|
<version>3.7.0</version>
|
||||||
|
<executions>
|
||||||
|
<!-- Replacing default-compile as it is treated specially by maven -->
|
||||||
|
<execution>
|
||||||
|
<id>default-compile</id>
|
||||||
|
<phase>none</phase>
|
||||||
|
</execution>
|
||||||
|
<!-- Replacing default-testCompile as it is treated specially by maven -->
|
||||||
|
<execution>
|
||||||
|
<id>default-testCompile</id>
|
||||||
|
<phase>none</phase>
|
||||||
|
</execution>
|
||||||
|
<execution>
|
||||||
|
<id>java-compile</id>
|
||||||
|
<phase>compile</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>compile</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
<execution>
|
||||||
|
<id>java-test-compile</id>
|
||||||
|
<phase>test-compile</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>testCompile</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
<configuration>
|
<configuration>
|
||||||
<source>1.8</source>
|
<source>1.8</source>
|
||||||
<target>1.8</target>
|
<target>1.8</target>
|
||||||
|
@ -54,7 +98,29 @@
|
||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-surefire-plugin</artifactId>
|
<artifactId>maven-surefire-plugin</artifactId>
|
||||||
<version>2.20.1</version>
|
<version>2.19.1</version>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.junit.platform</groupId>
|
||||||
|
<artifactId>junit-platform-surefire-provider</artifactId>
|
||||||
|
<version>1.0.1</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.junit.jupiter</groupId>
|
||||||
|
<artifactId>junit-jupiter-engine</artifactId>
|
||||||
|
<version>${junit5.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- TODO - remove when all test cases converted to junit 5 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.junit.vintage</groupId>
|
||||||
|
<artifactId>junit-vintage-engine</artifactId>
|
||||||
|
<version>${junit5.version}</version>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
<configuration>
|
||||||
|
<skipTests>${skipTests}</skipTests>
|
||||||
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
|
|
||||||
<plugin>
|
<plugin>
|
||||||
|
@ -84,7 +150,7 @@
|
||||||
<configuration>
|
<configuration>
|
||||||
<transformers>
|
<transformers>
|
||||||
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
|
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
|
||||||
<mainClass>main.LispMain</mainClass>
|
<mainClass>application.LispMain</mainClass>
|
||||||
</transformer>
|
</transformer>
|
||||||
</transformers>
|
</transformers>
|
||||||
</configuration>
|
</configuration>
|
||||||
|
@ -95,12 +161,40 @@
|
||||||
</build>
|
</build>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.jetbrains.kotlin</groupId>
|
||||||
|
<artifactId>kotlin-stdlib-jdk8</artifactId>
|
||||||
|
<version>${kotlin.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.googlecode.lanterna</groupId>
|
<groupId>com.googlecode.lanterna</groupId>
|
||||||
<artifactId>lanterna</artifactId>
|
<artifactId>lanterna</artifactId>
|
||||||
<version>3.0.0</version>
|
<version>3.0.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.assertj</groupId>
|
||||||
|
<artifactId>assertj-core</artifactId>
|
||||||
|
<version>3.9.1</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.junit.jupiter</groupId>
|
||||||
|
<artifactId>junit-jupiter-api</artifactId>
|
||||||
|
<version>${junit5.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.junit.jupiter</groupId>
|
||||||
|
<artifactId>junit-jupiter-params</artifactId>
|
||||||
|
<version>${junit5.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- TODO - remove when test cases all converted to junit 5 and assertj-->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>junit</groupId>
|
<groupId>junit</groupId>
|
||||||
<artifactId>junit</artifactId>
|
<artifactId>junit</artifactId>
|
||||||
|
@ -108,6 +202,7 @@
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<!-- TODO - remove when test cases all converted to junit 5 and assertj-->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.hamcrest</groupId>
|
<groupId>org.hamcrest</groupId>
|
||||||
<artifactId>hamcrest-all</artifactId>
|
<artifactId>hamcrest-all</artifactId>
|
||||||
|
@ -130,8 +225,4 @@
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<properties>
|
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
|
||||||
</properties>
|
|
||||||
|
|
||||||
</project>
|
</project>
|
|
@ -1,21 +0,0 @@
|
||||||
package error;
|
|
||||||
|
|
||||||
import static error.ErrorManager.Severity.CRITICAL;
|
|
||||||
|
|
||||||
import error.ErrorManager.Severity;
|
|
||||||
import file.FilePosition;
|
|
||||||
|
|
||||||
public abstract class CriticalLineColumnException extends LineColumnException {
|
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
|
||||||
|
|
||||||
public CriticalLineColumnException(FilePosition position) {
|
|
||||||
super(position);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Severity getSeverity() {
|
|
||||||
return CRITICAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,16 +0,0 @@
|
||||||
package error;
|
|
||||||
|
|
||||||
import static error.ErrorManager.Severity.CRITICAL;
|
|
||||||
|
|
||||||
import error.ErrorManager.Severity;
|
|
||||||
|
|
||||||
public abstract class CriticalLispException extends LispException {
|
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Severity getSeverity() {
|
|
||||||
return CRITICAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,99 +0,0 @@
|
||||||
package error;
|
|
||||||
|
|
||||||
import static error.ErrorManager.Severity.CRITICAL;
|
|
||||||
import static error.ErrorManager.Severity.WARNING;
|
|
||||||
import static java.text.MessageFormat.format;
|
|
||||||
|
|
||||||
import java.io.PrintStream;
|
|
||||||
|
|
||||||
import environment.RuntimeEnvironment;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Prints error messages and potentially terminates the application.
|
|
||||||
*/
|
|
||||||
public class ErrorManager {
|
|
||||||
|
|
||||||
private RuntimeEnvironment environment;
|
|
||||||
|
|
||||||
public ErrorManager() {
|
|
||||||
this.environment = RuntimeEnvironment.getInstance();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void handle(LispException lispException) {
|
|
||||||
printMessage(lispException);
|
|
||||||
|
|
||||||
if (isCritical(lispException))
|
|
||||||
environment.terminateExceptionally();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void printMessage(LispException lispException) {
|
|
||||||
PrintStream output = selectOutputStream(lispException.getSeverity());
|
|
||||||
output.println(formatMessage(lispException));
|
|
||||||
}
|
|
||||||
|
|
||||||
private PrintStream selectOutputStream(Severity severity) {
|
|
||||||
if (severity == WARNING)
|
|
||||||
return environment.getOutput();
|
|
||||||
|
|
||||||
return environment.getErrorOutput();
|
|
||||||
}
|
|
||||||
|
|
||||||
private String formatMessage(LispException lispException) {
|
|
||||||
Severity severity = lispException.getSeverity();
|
|
||||||
String prefix = severity.toDisplayString();
|
|
||||||
String message = format("[{0}] {1}", prefix, lispException.getMessage());
|
|
||||||
|
|
||||||
return severity.decorate(message, environment);
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean isCritical(LispException lispException) {
|
|
||||||
return lispException.getSeverity() == CRITICAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static enum Severity {
|
|
||||||
|
|
||||||
WARNING {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String decorate(String warningOutput, RuntimeEnvironment environment) {
|
|
||||||
return environment.decorateWarningOutput(warningOutput);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toDisplayString() {
|
|
||||||
return "warning";
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
ERROR {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String decorate(String errorOutput, RuntimeEnvironment environment) {
|
|
||||||
return environment.decorateErrorOutput(errorOutput);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toDisplayString() {
|
|
||||||
return "error";
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
CRITICAL {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String decorate(String criticalOutput, RuntimeEnvironment environment) {
|
|
||||||
return environment.decorateCriticalOutput(criticalOutput);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toDisplayString() {
|
|
||||||
return "critical";
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
public abstract String decorate(String output, RuntimeEnvironment environment);
|
|
||||||
|
|
||||||
public abstract String toDisplayString();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,26 +0,0 @@
|
||||||
package error;
|
|
||||||
|
|
||||||
import static java.text.MessageFormat.format;
|
|
||||||
|
|
||||||
import file.FilePosition;
|
|
||||||
|
|
||||||
public abstract class LineColumnException extends LispException {
|
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
|
||||||
private FilePosition position;
|
|
||||||
|
|
||||||
public LineColumnException(FilePosition position) {
|
|
||||||
this.position = position;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getMessage() {
|
|
||||||
return format("{0} - line {1}, column {2}",
|
|
||||||
getMessagePrefix(),
|
|
||||||
position.getLineNumber(),
|
|
||||||
position.getColumnNumber());
|
|
||||||
}
|
|
||||||
|
|
||||||
public abstract String getMessagePrefix();
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,15 +0,0 @@
|
||||||
package error;
|
|
||||||
|
|
||||||
import static error.ErrorManager.Severity.ERROR;
|
|
||||||
|
|
||||||
import error.ErrorManager.Severity;
|
|
||||||
|
|
||||||
public abstract class LispException extends RuntimeException {
|
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
|
||||||
|
|
||||||
public Severity getSeverity() {
|
|
||||||
return ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,16 +0,0 @@
|
||||||
package error;
|
|
||||||
|
|
||||||
import static error.ErrorManager.Severity.WARNING;
|
|
||||||
|
|
||||||
import error.ErrorManager.Severity;
|
|
||||||
|
|
||||||
public abstract class LispWarning extends LispException {
|
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Severity getSeverity() {
|
|
||||||
return WARNING;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,70 +0,0 @@
|
||||||
package function.builtin.special;
|
|
||||||
|
|
||||||
import static function.builtin.cons.LIST.makeList;
|
|
||||||
|
|
||||||
import function.ArgumentValidator;
|
|
||||||
import function.FunctionNames;
|
|
||||||
import function.LispSpecialFunction;
|
|
||||||
import function.UserDefinedFunction;
|
|
||||||
import sexpression.Cons;
|
|
||||||
import sexpression.LambdaExpression;
|
|
||||||
import sexpression.SExpression;
|
|
||||||
import sexpression.Symbol;
|
|
||||||
|
|
||||||
@FunctionNames({ "LAMBDA", "Λ" })
|
|
||||||
public class LAMBDA extends LispSpecialFunction {
|
|
||||||
|
|
||||||
public static boolean isLambdaExpression(SExpression sexpr) {
|
|
||||||
if (sexpr.isCons()) {
|
|
||||||
String first = ((Cons) sexpr).getFirst().toString();
|
|
||||||
|
|
||||||
return "LAMBDA".equals(first) || "Λ".equals(first);
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static UserDefinedFunction createFunction(Cons lambdaExpression) {
|
|
||||||
SExpression rest = lambdaExpression.getRest();
|
|
||||||
|
|
||||||
ArgumentValidator lambdaValidator = new ArgumentValidator("LAMBDA|create|");
|
|
||||||
lambdaValidator.setEveryArgumentExpectedType(Cons.class);
|
|
||||||
lambdaValidator.validate(makeList(rest));
|
|
||||||
|
|
||||||
LambdaExpression lambda = new LAMBDA("LAMBDA").call((Cons) rest);
|
|
||||||
|
|
||||||
return lambda.getFunction();
|
|
||||||
}
|
|
||||||
|
|
||||||
private ArgumentValidator argumentValidator;
|
|
||||||
private ArgumentValidator lambdaListValidator;
|
|
||||||
|
|
||||||
public LAMBDA(String name) {
|
|
||||||
this.argumentValidator = new ArgumentValidator(name);
|
|
||||||
this.argumentValidator.setFirstArgumentExpectedType(Cons.class);
|
|
||||||
this.argumentValidator.setMinimumNumberOfArguments(1);
|
|
||||||
|
|
||||||
this.lambdaListValidator = new ArgumentValidator(name + "|lambda-list|");
|
|
||||||
this.lambdaListValidator.setEveryArgumentExpectedType(Symbol.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public LambdaExpression call(Cons argumentList) {
|
|
||||||
argumentValidator.validate(argumentList);
|
|
||||||
|
|
||||||
SExpression first = argumentList.getFirst();
|
|
||||||
Cons lambdaList = (Cons) first;
|
|
||||||
Cons body = (Cons) argumentList.getRest();
|
|
||||||
|
|
||||||
lambdaListValidator.validate(lambdaList);
|
|
||||||
|
|
||||||
UserDefinedFunction function = new UserDefinedFunction(":LAMBDA", lambdaList, body);
|
|
||||||
|
|
||||||
return new LambdaExpression(makeOriginalLambdaExpression(argumentList), function);
|
|
||||||
}
|
|
||||||
|
|
||||||
private Cons makeOriginalLambdaExpression(Cons argumentList) {
|
|
||||||
return new Cons(new Symbol("LAMBDA"), argumentList);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,8 +1,14 @@
|
||||||
package main;
|
package application;
|
||||||
|
|
||||||
import static com.googlecode.lanterna.terminal.IOSafeTerminalAdapter.createRuntimeExceptionConvertingAdapter;
|
import com.googlecode.lanterna.terminal.DefaultTerminalFactory;
|
||||||
import static java.text.MessageFormat.format;
|
import com.googlecode.lanterna.terminal.IOSafeTerminal;
|
||||||
import static terminal.LispTerminal.END_OF_SEGMENT;
|
import com.googlecode.lanterna.terminal.Terminal;
|
||||||
|
import interpreter.LispInterpreter;
|
||||||
|
import interpreter.LispInterpreterBuilder;
|
||||||
|
import interpreter.LispInterpreterBuilderImpl;
|
||||||
|
import stream.UncheckedIOException;
|
||||||
|
import terminal.LispTerminal;
|
||||||
|
import terminal.TerminalConfiguration;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.PipedInputStream;
|
import java.io.PipedInputStream;
|
||||||
|
@ -10,16 +16,9 @@ import java.io.PipedOutputStream;
|
||||||
import java.io.PrintStream;
|
import java.io.PrintStream;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
import com.googlecode.lanterna.terminal.DefaultTerminalFactory;
|
import static com.googlecode.lanterna.terminal.IOSafeTerminalAdapter.createRuntimeExceptionConvertingAdapter;
|
||||||
import com.googlecode.lanterna.terminal.IOSafeTerminal;
|
import static java.text.MessageFormat.format;
|
||||||
import com.googlecode.lanterna.terminal.Terminal;
|
import static terminal.LispTerminal.END_OF_SEGMENT;
|
||||||
|
|
||||||
import interpreter.LispInterpreter;
|
|
||||||
import interpreter.LispInterpreterBuilder;
|
|
||||||
import interpreter.LispInterpreterBuilderImpl;
|
|
||||||
import stream.UncheckedIOException;
|
|
||||||
import terminal.LispTerminal;
|
|
||||||
import terminal.TerminalConfiguration;
|
|
||||||
|
|
||||||
public class LispMain {
|
public class LispMain {
|
||||||
|
|
||||||
|
@ -152,5 +151,4 @@ public class LispMain {
|
||||||
|
|
||||||
return builder.build();
|
return builder.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,11 +1,11 @@
|
||||||
package environment;
|
package environment;
|
||||||
|
|
||||||
|
import error.ErrorManager;
|
||||||
|
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.PrintStream;
|
import java.io.PrintStream;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
import error.ErrorManager;
|
|
||||||
|
|
||||||
public class RuntimeEnvironment {
|
public class RuntimeEnvironment {
|
||||||
|
|
||||||
private static RuntimeEnvironment uniqueInstance = new RuntimeEnvironment();
|
private static RuntimeEnvironment uniqueInstance = new RuntimeEnvironment();
|
||||||
|
@ -151,5 +151,4 @@ public class RuntimeEnvironment {
|
||||||
public String decorateCriticalOutput(String criticalOutput) {
|
public String decorateCriticalOutput(String criticalOutput) {
|
||||||
return criticalOutputDecorator.apply(criticalOutput);
|
return criticalOutputDecorator.apply(criticalOutput);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -0,0 +1,9 @@
|
||||||
|
package error
|
||||||
|
|
||||||
|
import error.Severity.CRITICAL
|
||||||
|
import file.FilePosition
|
||||||
|
|
||||||
|
abstract class CriticalLineColumnException(position: FilePosition) : LineColumnException(position) {
|
||||||
|
|
||||||
|
override val severity = CRITICAL
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
package error
|
||||||
|
|
||||||
|
import error.Severity.CRITICAL
|
||||||
|
|
||||||
|
abstract class CriticalLispException : LispException() {
|
||||||
|
|
||||||
|
override val severity = CRITICAL
|
||||||
|
}
|
|
@ -0,0 +1,41 @@
|
||||||
|
package error
|
||||||
|
|
||||||
|
import environment.RuntimeEnvironment
|
||||||
|
import error.Severity.CRITICAL
|
||||||
|
import error.Severity.WARNING
|
||||||
|
import java.io.PrintStream
|
||||||
|
import java.text.MessageFormat.format
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prints error messages and potentially terminates the application.
|
||||||
|
*/
|
||||||
|
class ErrorManager {
|
||||||
|
|
||||||
|
private val environment: RuntimeEnvironment = RuntimeEnvironment.getInstance()
|
||||||
|
|
||||||
|
fun handle(lispException: LispException) {
|
||||||
|
printMessage(lispException)
|
||||||
|
|
||||||
|
if (isCritical(lispException))
|
||||||
|
environment.terminateExceptionally()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun printMessage(lispException: LispException) {
|
||||||
|
val output = selectOutputStream(lispException.severity)
|
||||||
|
output.println(formatMessage(lispException))
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun selectOutputStream(severity: Severity): PrintStream {
|
||||||
|
return if (severity === WARNING) environment.output else environment.errorOutput
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun formatMessage(lispException: LispException): String {
|
||||||
|
val severity = lispException.severity
|
||||||
|
val prefix = severity.toDisplayString()
|
||||||
|
val message = format("[{0}] {1}", prefix, lispException.message)
|
||||||
|
|
||||||
|
return severity.decorate(message, environment)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun isCritical(lispException: LispException) = lispException.severity == CRITICAL
|
||||||
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
package error
|
||||||
|
|
||||||
|
import file.FilePosition
|
||||||
|
import java.text.MessageFormat.format
|
||||||
|
|
||||||
|
abstract class LineColumnException(private val position: FilePosition) : LispException() {
|
||||||
|
|
||||||
|
abstract val messagePrefix: String
|
||||||
|
|
||||||
|
override val message: String
|
||||||
|
get() = format("{0} - line {1}, column {2}", messagePrefix, position.lineNumber, position.columnNumber)
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
package error
|
||||||
|
|
||||||
|
import error.Severity.ERROR
|
||||||
|
|
||||||
|
abstract class LispException : RuntimeException() {
|
||||||
|
|
||||||
|
open val severity = ERROR
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
package error
|
||||||
|
|
||||||
|
import error.Severity.WARNING
|
||||||
|
|
||||||
|
abstract class LispWarning : LispException() {
|
||||||
|
|
||||||
|
override val severity = WARNING
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
package error
|
||||||
|
|
||||||
|
import environment.RuntimeEnvironment
|
||||||
|
|
||||||
|
enum class Severity {
|
||||||
|
|
||||||
|
WARNING {
|
||||||
|
override fun decorate(output: String, environment: RuntimeEnvironment): String =
|
||||||
|
environment.decorateWarningOutput(output)
|
||||||
|
|
||||||
|
override fun toDisplayString() = "warning"
|
||||||
|
},
|
||||||
|
|
||||||
|
ERROR {
|
||||||
|
override fun decorate(output: String, environment: RuntimeEnvironment): String =
|
||||||
|
environment.decorateErrorOutput(output)
|
||||||
|
|
||||||
|
override fun toDisplayString() = "error"
|
||||||
|
},
|
||||||
|
|
||||||
|
CRITICAL {
|
||||||
|
override fun decorate(output: String, environment: RuntimeEnvironment): String =
|
||||||
|
environment.decorateCriticalOutput(output)
|
||||||
|
|
||||||
|
override fun toDisplayString() = "critical"
|
||||||
|
};
|
||||||
|
|
||||||
|
abstract fun decorate(output: String, environment: RuntimeEnvironment): String
|
||||||
|
|
||||||
|
abstract fun toDisplayString(): String
|
||||||
|
}
|
|
@ -29,5 +29,4 @@ public class FilePosition {
|
||||||
public void setColumnNumber(int columnNumber) {
|
public void setColumnNumber(int columnNumber) {
|
||||||
this.columnNumber = columnNumber;
|
this.columnNumber = columnNumber;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -28,5 +28,4 @@ public class FilePositionTracker {
|
||||||
lineNumber++;
|
lineNumber++;
|
||||||
columnNumber = 0;
|
columnNumber = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,15 +1,15 @@
|
||||||
package function;
|
package function;
|
||||||
|
|
||||||
import static function.builtin.cons.LENGTH.getLength;
|
|
||||||
import static java.text.MessageFormat.format;
|
|
||||||
|
|
||||||
import java.math.BigInteger;
|
|
||||||
|
|
||||||
import error.LispException;
|
import error.LispException;
|
||||||
import sexpression.Cons;
|
import sexpression.Cons;
|
||||||
import sexpression.DisplayName;
|
import sexpression.DisplayName;
|
||||||
import sexpression.SExpression;
|
import sexpression.SExpression;
|
||||||
|
|
||||||
|
import java.math.BigInteger;
|
||||||
|
|
||||||
|
import static function.builtin.cons.LENGTH.getLength;
|
||||||
|
import static java.text.MessageFormat.format;
|
||||||
|
|
||||||
public class ArgumentValidator {
|
public class ArgumentValidator {
|
||||||
|
|
||||||
private Class<? extends SExpression> firstArgumentType;
|
private Class<? extends SExpression> firstArgumentType;
|
||||||
|
@ -231,5 +231,4 @@ public class ArgumentValidator {
|
||||||
return (displayName == null) ? "unknown" : displayName.value();
|
return (displayName == null) ? "unknown" : displayName.value();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -10,5 +10,4 @@ import java.lang.annotation.Target;
|
||||||
public @interface FunctionNames {
|
public @interface FunctionNames {
|
||||||
|
|
||||||
String[] value();
|
String[] value();
|
||||||
|
|
||||||
}
|
}
|
|
@ -14,5 +14,4 @@ public abstract class LispFunction {
|
||||||
public boolean isMacro() {
|
public boolean isMacro() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -6,5 +6,4 @@ public abstract class LispSpecialFunction extends LispFunction {
|
||||||
public boolean isArgumentListEvaluated() {
|
public boolean isArgumentListEvaluated() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,12 +1,5 @@
|
||||||
package function;
|
package function;
|
||||||
|
|
||||||
import static function.builtin.EVAL.eval;
|
|
||||||
import static java.text.MessageFormat.format;
|
|
||||||
import static recursion.TailCalls.done;
|
|
||||||
import static sexpression.Nil.NIL;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
|
|
||||||
import error.LispException;
|
import error.LispException;
|
||||||
import recursion.TailCall;
|
import recursion.TailCall;
|
||||||
import recursion.TailCalls;
|
import recursion.TailCalls;
|
||||||
|
@ -16,6 +9,13 @@ import sexpression.Symbol;
|
||||||
import table.ExecutionContext;
|
import table.ExecutionContext;
|
||||||
import table.SymbolTable;
|
import table.SymbolTable;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
import static function.builtin.EVAL.eval;
|
||||||
|
import static java.text.MessageFormat.format;
|
||||||
|
import static recursion.TailCalls.done;
|
||||||
|
import static sexpression.Nil.NIL;
|
||||||
|
|
||||||
public class UserDefinedFunction extends LispFunction {
|
public class UserDefinedFunction extends LispFunction {
|
||||||
|
|
||||||
private static final String KEYWORD_REST = "&REST";
|
private static final String KEYWORD_REST = "&REST";
|
||||||
|
@ -166,5 +166,4 @@ public class UserDefinedFunction extends LispFunction {
|
||||||
parameters);
|
parameters);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -12,5 +12,4 @@ public class UserDefinedMacro extends UserDefinedSpecialFunction {
|
||||||
public boolean isMacro() {
|
public boolean isMacro() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -12,5 +12,4 @@ public class UserDefinedSpecialFunction extends UserDefinedFunction {
|
||||||
public boolean isArgumentListEvaluated() {
|
public boolean isArgumentListEvaluated() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,15 +1,15 @@
|
||||||
package function.builtin;
|
package function.builtin;
|
||||||
|
|
||||||
import static function.builtin.EVAL.applyFunction;
|
|
||||||
import static function.builtin.EVAL.lookupFunctionOrLambda;
|
|
||||||
import static table.FunctionTable.lookupFunction;
|
|
||||||
|
|
||||||
import function.ArgumentValidator;
|
import function.ArgumentValidator;
|
||||||
import function.FunctionNames;
|
import function.FunctionNames;
|
||||||
import function.LispFunction;
|
import function.LispFunction;
|
||||||
import sexpression.Cons;
|
import sexpression.Cons;
|
||||||
import sexpression.SExpression;
|
import sexpression.SExpression;
|
||||||
|
|
||||||
|
import static function.builtin.EVAL.applyFunction;
|
||||||
|
import static function.builtin.EVAL.lookupFunctionOrLambda;
|
||||||
|
import static table.FunctionTable.lookupFunction;
|
||||||
|
|
||||||
@FunctionNames({ "APPLY" })
|
@FunctionNames({ "APPLY" })
|
||||||
public class APPLY extends LispFunction {
|
public class APPLY extends LispFunction {
|
||||||
|
|
||||||
|
@ -36,5 +36,4 @@ public class APPLY extends LispFunction {
|
||||||
|
|
||||||
return applyFunction(function, functionArguments);
|
return applyFunction(function, functionArguments);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,8 +1,5 @@
|
||||||
package function.builtin;
|
package function.builtin;
|
||||||
|
|
||||||
import static function.builtin.EVAL.eval;
|
|
||||||
import static sexpression.Nil.NIL;
|
|
||||||
|
|
||||||
import error.LispException;
|
import error.LispException;
|
||||||
import function.ArgumentValidator;
|
import function.ArgumentValidator;
|
||||||
import sexpression.AtSignExpression;
|
import sexpression.AtSignExpression;
|
||||||
|
@ -11,6 +8,9 @@ import sexpression.CommaExpression;
|
||||||
import sexpression.Cons;
|
import sexpression.Cons;
|
||||||
import sexpression.SExpression;
|
import sexpression.SExpression;
|
||||||
|
|
||||||
|
import static function.builtin.EVAL.eval;
|
||||||
|
import static sexpression.Nil.NIL;
|
||||||
|
|
||||||
class BackquoteEvaluator {
|
class BackquoteEvaluator {
|
||||||
|
|
||||||
private ArgumentValidator listValidator;
|
private ArgumentValidator listValidator;
|
||||||
|
@ -201,5 +201,4 @@ class BackquoteEvaluator {
|
||||||
return "at sign did not evaluate to a list";
|
return "at sign did not evaluate to a list";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,17 +1,10 @@
|
||||||
package function.builtin;
|
package function.builtin;
|
||||||
|
|
||||||
import static function.builtin.cons.LIST.makeList;
|
|
||||||
import static function.builtin.special.LAMBDA.createFunction;
|
|
||||||
import static function.builtin.special.LAMBDA.isLambdaExpression;
|
|
||||||
import static java.text.MessageFormat.format;
|
|
||||||
import static sexpression.Nil.NIL;
|
|
||||||
import static sexpression.Symbol.T;
|
|
||||||
import static table.FunctionTable.lookupFunction;
|
|
||||||
|
|
||||||
import error.LispException;
|
import error.LispException;
|
||||||
import function.ArgumentValidator;
|
import function.ArgumentValidator;
|
||||||
import function.FunctionNames;
|
import function.FunctionNames;
|
||||||
import function.LispFunction;
|
import function.LispFunction;
|
||||||
|
import function.builtin.special.LAMBDA;
|
||||||
import function.builtin.special.RECUR.RecurNotInTailPositionException;
|
import function.builtin.special.RECUR.RecurNotInTailPositionException;
|
||||||
import sexpression.BackquoteExpression;
|
import sexpression.BackquoteExpression;
|
||||||
import sexpression.Cons;
|
import sexpression.Cons;
|
||||||
|
@ -20,6 +13,12 @@ import sexpression.SExpression;
|
||||||
import sexpression.Symbol;
|
import sexpression.Symbol;
|
||||||
import table.ExecutionContext;
|
import table.ExecutionContext;
|
||||||
|
|
||||||
|
import static function.builtin.cons.LIST.makeList;
|
||||||
|
import static java.text.MessageFormat.format;
|
||||||
|
import static sexpression.Nil.NIL;
|
||||||
|
import static sexpression.Symbol.T;
|
||||||
|
import static table.FunctionTable.lookupFunction;
|
||||||
|
|
||||||
@FunctionNames({ "EVAL" })
|
@FunctionNames({ "EVAL" })
|
||||||
public class EVAL extends LispFunction {
|
public class EVAL extends LispFunction {
|
||||||
|
|
||||||
|
@ -60,8 +59,8 @@ public class EVAL extends LispFunction {
|
||||||
private static LispFunction createLambdaFunction(SExpression lambdaExpression) {
|
private static LispFunction createLambdaFunction(SExpression lambdaExpression) {
|
||||||
if (lambdaExpression.isFunction())
|
if (lambdaExpression.isFunction())
|
||||||
return ((LambdaExpression) lambdaExpression).getFunction();
|
return ((LambdaExpression) lambdaExpression).getFunction();
|
||||||
else if (isLambdaExpression(lambdaExpression))
|
else if (LAMBDA.Companion.isLambdaExpression(lambdaExpression))
|
||||||
return createFunction((Cons) lambdaExpression);
|
return LAMBDA.Companion.createFunction((Cons) lambdaExpression);
|
||||||
else
|
else
|
||||||
throw new UndefinedFunctionException(lambdaExpression);
|
throw new UndefinedFunctionException(lambdaExpression);
|
||||||
}
|
}
|
||||||
|
@ -228,5 +227,4 @@ public class EVAL extends LispFunction {
|
||||||
return "unmatched at sign";
|
return "unmatched at sign";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,7 +1,5 @@
|
||||||
package function.builtin;
|
package function.builtin;
|
||||||
|
|
||||||
import static sexpression.Nil.NIL;
|
|
||||||
|
|
||||||
import environment.RuntimeEnvironment;
|
import environment.RuntimeEnvironment;
|
||||||
import function.ArgumentValidator;
|
import function.ArgumentValidator;
|
||||||
import function.FunctionNames;
|
import function.FunctionNames;
|
||||||
|
@ -9,6 +7,8 @@ import function.LispFunction;
|
||||||
import sexpression.Cons;
|
import sexpression.Cons;
|
||||||
import sexpression.SExpression;
|
import sexpression.SExpression;
|
||||||
|
|
||||||
|
import static sexpression.Nil.NIL;
|
||||||
|
|
||||||
@FunctionNames({ "EXIT" })
|
@FunctionNames({ "EXIT" })
|
||||||
public class EXIT extends LispFunction {
|
public class EXIT extends LispFunction {
|
||||||
|
|
||||||
|
@ -28,5 +28,4 @@ public class EXIT extends LispFunction {
|
||||||
|
|
||||||
return NIL;
|
return NIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,14 +1,14 @@
|
||||||
package function.builtin;
|
package function.builtin;
|
||||||
|
|
||||||
import static function.builtin.APPLY.apply;
|
|
||||||
import static function.builtin.cons.LIST.makeList;
|
|
||||||
|
|
||||||
import function.ArgumentValidator;
|
import function.ArgumentValidator;
|
||||||
import function.FunctionNames;
|
import function.FunctionNames;
|
||||||
import function.LispFunction;
|
import function.LispFunction;
|
||||||
import sexpression.Cons;
|
import sexpression.Cons;
|
||||||
import sexpression.SExpression;
|
import sexpression.SExpression;
|
||||||
|
|
||||||
|
import static function.builtin.APPLY.apply;
|
||||||
|
import static function.builtin.cons.LIST.makeList;
|
||||||
|
|
||||||
@FunctionNames({ "FUNCALL", "CALL" })
|
@FunctionNames({ "FUNCALL", "CALL" })
|
||||||
public class FUNCALL extends LispFunction {
|
public class FUNCALL extends LispFunction {
|
||||||
|
|
||||||
|
@ -26,5 +26,4 @@ public class FUNCALL extends LispFunction {
|
||||||
|
|
||||||
return apply(applyArgs);
|
return apply(applyArgs);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -32,5 +32,4 @@ public class FUSE extends LispFunction {
|
||||||
|
|
||||||
return new Symbol(left.toString() + SEPARATOR + right.toString());
|
return new Symbol(left.toString() + SEPARATOR + right.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,7 +1,5 @@
|
||||||
package function.builtin;
|
package function.builtin;
|
||||||
|
|
||||||
import java.math.BigInteger;
|
|
||||||
|
|
||||||
import function.ArgumentValidator;
|
import function.ArgumentValidator;
|
||||||
import function.FunctionNames;
|
import function.FunctionNames;
|
||||||
import function.LispFunction;
|
import function.LispFunction;
|
||||||
|
@ -9,6 +7,8 @@ import sexpression.Cons;
|
||||||
import sexpression.SExpression;
|
import sexpression.SExpression;
|
||||||
import sexpression.Symbol;
|
import sexpression.Symbol;
|
||||||
|
|
||||||
|
import java.math.BigInteger;
|
||||||
|
|
||||||
@FunctionNames({ "GENSYM" })
|
@FunctionNames({ "GENSYM" })
|
||||||
public class GENSYM extends LispFunction {
|
public class GENSYM extends LispFunction {
|
||||||
|
|
||||||
|
@ -39,5 +39,4 @@ public class GENSYM extends LispFunction {
|
||||||
|
|
||||||
return generateSymbol();
|
return generateSymbol();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,15 +1,5 @@
|
||||||
package function.builtin;
|
package function.builtin;
|
||||||
|
|
||||||
import static function.builtin.EVAL.eval;
|
|
||||||
import static java.text.MessageFormat.format;
|
|
||||||
import static sexpression.Nil.NIL;
|
|
||||||
import static sexpression.Symbol.T;
|
|
||||||
import static util.Path.getPathPrefix;
|
|
||||||
|
|
||||||
import java.io.FileInputStream;
|
|
||||||
import java.io.FileNotFoundException;
|
|
||||||
import java.util.Stack;
|
|
||||||
|
|
||||||
import environment.RuntimeEnvironment;
|
import environment.RuntimeEnvironment;
|
||||||
import error.LispException;
|
import error.LispException;
|
||||||
import error.LispWarning;
|
import error.LispWarning;
|
||||||
|
@ -21,6 +11,16 @@ import sexpression.Cons;
|
||||||
import sexpression.LispString;
|
import sexpression.LispString;
|
||||||
import sexpression.SExpression;
|
import sexpression.SExpression;
|
||||||
|
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.FileNotFoundException;
|
||||||
|
import java.util.Stack;
|
||||||
|
|
||||||
|
import static function.builtin.EVAL.eval;
|
||||||
|
import static java.text.MessageFormat.format;
|
||||||
|
import static sexpression.Nil.NIL;
|
||||||
|
import static sexpression.Symbol.T;
|
||||||
|
import static util.Path.getPathPrefix;
|
||||||
|
|
||||||
@FunctionNames({ "LOAD" })
|
@FunctionNames({ "LOAD" })
|
||||||
public class LOAD extends LispFunction {
|
public class LOAD extends LispFunction {
|
||||||
|
|
||||||
|
@ -114,5 +114,4 @@ public class LOAD extends LispFunction {
|
||||||
return format("could not load ''{0}''", fileName);
|
return format("could not load ''{0}''", fileName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -27,5 +27,4 @@ public class PRINT extends LispFunction {
|
||||||
|
|
||||||
return argument;
|
return argument;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,7 +1,5 @@
|
||||||
package function.builtin;
|
package function.builtin;
|
||||||
|
|
||||||
import static table.FunctionTable.lookupFunction;
|
|
||||||
|
|
||||||
import function.ArgumentValidator;
|
import function.ArgumentValidator;
|
||||||
import function.FunctionNames;
|
import function.FunctionNames;
|
||||||
import function.LispFunction;
|
import function.LispFunction;
|
||||||
|
@ -11,6 +9,8 @@ import sexpression.Symbol;
|
||||||
import table.ExecutionContext;
|
import table.ExecutionContext;
|
||||||
import table.SymbolTable;
|
import table.SymbolTable;
|
||||||
|
|
||||||
|
import static table.FunctionTable.lookupFunction;
|
||||||
|
|
||||||
@FunctionNames({ "SET" })
|
@FunctionNames({ "SET" })
|
||||||
public class SET extends LispFunction {
|
public class SET extends LispFunction {
|
||||||
|
|
||||||
|
@ -54,5 +54,4 @@ public class SET extends LispFunction {
|
||||||
private boolean isSymbolInTable(SExpression symbol, SymbolTable table) {
|
private boolean isSymbolInTable(SExpression symbol, SymbolTable table) {
|
||||||
return table.contains(symbol.toString());
|
return table.contains(symbol.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -25,5 +25,4 @@ public class SYMBOLS extends LispFunction {
|
||||||
|
|
||||||
return executionContext.toList();
|
return executionContext.toList();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,8 +1,5 @@
|
||||||
package function.builtin;
|
package function.builtin;
|
||||||
|
|
||||||
import static java.text.MessageFormat.format;
|
|
||||||
import static table.FunctionTable.lookupFunction;
|
|
||||||
|
|
||||||
import error.LispException;
|
import error.LispException;
|
||||||
import function.ArgumentValidator;
|
import function.ArgumentValidator;
|
||||||
import function.FunctionNames;
|
import function.FunctionNames;
|
||||||
|
@ -13,6 +10,9 @@ import sexpression.Cons;
|
||||||
import sexpression.SExpression;
|
import sexpression.SExpression;
|
||||||
import sexpression.Symbol;
|
import sexpression.Symbol;
|
||||||
|
|
||||||
|
import static java.text.MessageFormat.format;
|
||||||
|
import static table.FunctionTable.lookupFunction;
|
||||||
|
|
||||||
@FunctionNames({ "SYMBOL-FUNCTION" })
|
@FunctionNames({ "SYMBOL-FUNCTION" })
|
||||||
public class SYMBOL_FUNCTION extends LispFunction {
|
public class SYMBOL_FUNCTION extends LispFunction {
|
||||||
|
|
||||||
|
@ -60,5 +60,4 @@ public class SYMBOL_FUNCTION extends LispFunction {
|
||||||
return format("SYMBOL-FUNCTION: undefined function: {0}", function);
|
return format("SYMBOL-FUNCTION: undefined function: {0}", function);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,13 +1,13 @@
|
||||||
package function.builtin.cons;
|
package function.builtin.cons;
|
||||||
|
|
||||||
import static sexpression.Nil.NIL;
|
|
||||||
import static table.FunctionTable.lookupFunction;
|
|
||||||
|
|
||||||
import function.ArgumentValidator;
|
import function.ArgumentValidator;
|
||||||
import function.FunctionNames;
|
import function.FunctionNames;
|
||||||
import function.LispFunction;
|
import function.LispFunction;
|
||||||
import sexpression.Cons;
|
import sexpression.Cons;
|
||||||
|
|
||||||
|
import static sexpression.Nil.NIL;
|
||||||
|
import static table.FunctionTable.lookupFunction;
|
||||||
|
|
||||||
@FunctionNames({ "APPEND" })
|
@FunctionNames({ "APPEND" })
|
||||||
public class APPEND extends LispFunction {
|
public class APPEND extends LispFunction {
|
||||||
|
|
|
@ -26,5 +26,4 @@ public class CONS extends LispFunction {
|
||||||
|
|
||||||
return new Cons(firstArgument, secondArgument);
|
return new Cons(firstArgument, secondArgument);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -24,5 +24,4 @@ public class FIRST extends LispFunction {
|
||||||
|
|
||||||
return argument.getFirst();
|
return argument.getFirst();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,12 +1,5 @@
|
||||||
package function.builtin.cons;
|
package function.builtin.cons;
|
||||||
|
|
||||||
import static function.builtin.cons.LIST.makeList;
|
|
||||||
import static recursion.TailCalls.done;
|
|
||||||
import static recursion.TailCalls.tailCall;
|
|
||||||
import static table.FunctionTable.lookupFunction;
|
|
||||||
|
|
||||||
import java.math.BigInteger;
|
|
||||||
|
|
||||||
import function.ArgumentValidator;
|
import function.ArgumentValidator;
|
||||||
import function.FunctionNames;
|
import function.FunctionNames;
|
||||||
import function.LispFunction;
|
import function.LispFunction;
|
||||||
|
@ -14,6 +7,13 @@ import recursion.TailCall;
|
||||||
import sexpression.Cons;
|
import sexpression.Cons;
|
||||||
import sexpression.LispNumber;
|
import sexpression.LispNumber;
|
||||||
|
|
||||||
|
import java.math.BigInteger;
|
||||||
|
|
||||||
|
import static function.builtin.cons.LIST.makeList;
|
||||||
|
import static recursion.TailCalls.done;
|
||||||
|
import static recursion.TailCalls.tailCall;
|
||||||
|
import static table.FunctionTable.lookupFunction;
|
||||||
|
|
||||||
@FunctionNames({ "LENGTH" })
|
@FunctionNames({ "LENGTH" })
|
||||||
public class LENGTH extends LispFunction {
|
public class LENGTH extends LispFunction {
|
||||||
|
|
||||||
|
@ -62,5 +62,4 @@ public class LENGTH extends LispFunction {
|
||||||
private BigInteger increment(BigInteger number) {
|
private BigInteger increment(BigInteger number) {
|
||||||
return number.add(BigInteger.ONE);
|
return number.add(BigInteger.ONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,13 +1,13 @@
|
||||||
package function.builtin.cons;
|
package function.builtin.cons;
|
||||||
|
|
||||||
import static sexpression.Nil.NIL;
|
|
||||||
|
|
||||||
import function.ArgumentValidator;
|
import function.ArgumentValidator;
|
||||||
import function.FunctionNames;
|
import function.FunctionNames;
|
||||||
import function.LispFunction;
|
import function.LispFunction;
|
||||||
import sexpression.Cons;
|
import sexpression.Cons;
|
||||||
import sexpression.SExpression;
|
import sexpression.SExpression;
|
||||||
|
|
||||||
|
import static sexpression.Nil.NIL;
|
||||||
|
|
||||||
@FunctionNames({ "LIST" })
|
@FunctionNames({ "LIST" })
|
||||||
public class LIST extends LispFunction {
|
public class LIST extends LispFunction {
|
||||||
|
|
||||||
|
@ -27,5 +27,4 @@ public class LIST extends LispFunction {
|
||||||
|
|
||||||
return argumentList;
|
return argumentList;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -24,5 +24,4 @@ public class REST extends LispFunction {
|
||||||
|
|
||||||
return argument.getRest();
|
return argument.getRest();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,7 +1,5 @@
|
||||||
package function.builtin.math;
|
package function.builtin.math;
|
||||||
|
|
||||||
import java.math.BigInteger;
|
|
||||||
|
|
||||||
import error.LispException;
|
import error.LispException;
|
||||||
import function.ArgumentValidator;
|
import function.ArgumentValidator;
|
||||||
import function.FunctionNames;
|
import function.FunctionNames;
|
||||||
|
@ -9,6 +7,8 @@ import function.LispFunction;
|
||||||
import sexpression.Cons;
|
import sexpression.Cons;
|
||||||
import sexpression.LispNumber;
|
import sexpression.LispNumber;
|
||||||
|
|
||||||
|
import java.math.BigInteger;
|
||||||
|
|
||||||
@FunctionNames({ "/" })
|
@FunctionNames({ "/" })
|
||||||
public class DIVIDE extends LispFunction {
|
public class DIVIDE extends LispFunction {
|
||||||
|
|
||||||
|
@ -50,5 +50,4 @@ public class DIVIDE extends LispFunction {
|
||||||
return "divide by zero";
|
return "divide by zero";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,13 +1,13 @@
|
||||||
package function.builtin.math;
|
package function.builtin.math;
|
||||||
|
|
||||||
import java.math.BigInteger;
|
|
||||||
|
|
||||||
import function.ArgumentValidator;
|
import function.ArgumentValidator;
|
||||||
import function.FunctionNames;
|
import function.FunctionNames;
|
||||||
import function.LispFunction;
|
import function.LispFunction;
|
||||||
import sexpression.Cons;
|
import sexpression.Cons;
|
||||||
import sexpression.LispNumber;
|
import sexpression.LispNumber;
|
||||||
|
|
||||||
|
import java.math.BigInteger;
|
||||||
|
|
||||||
@FunctionNames({ "-" })
|
@FunctionNames({ "-" })
|
||||||
public class MINUS extends LispFunction {
|
public class MINUS extends LispFunction {
|
||||||
|
|
||||||
|
@ -35,5 +35,4 @@ public class MINUS extends LispFunction {
|
||||||
private LispNumber subtract(LispNumber number1, LispNumber number2) {
|
private LispNumber subtract(LispNumber number1, LispNumber number2) {
|
||||||
return new LispNumber(number1.getValue().subtract(number2.getValue()));
|
return new LispNumber(number1.getValue().subtract(number2.getValue()));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -41,5 +41,4 @@ public class MODULO extends LispFunction {
|
||||||
return "modulus not positive";
|
return "modulus not positive";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,13 +1,13 @@
|
||||||
package function.builtin.math;
|
package function.builtin.math;
|
||||||
|
|
||||||
import static sexpression.LispNumber.ONE;
|
|
||||||
|
|
||||||
import function.ArgumentValidator;
|
import function.ArgumentValidator;
|
||||||
import function.FunctionNames;
|
import function.FunctionNames;
|
||||||
import function.LispFunction;
|
import function.LispFunction;
|
||||||
import sexpression.Cons;
|
import sexpression.Cons;
|
||||||
import sexpression.LispNumber;
|
import sexpression.LispNumber;
|
||||||
|
|
||||||
|
import static sexpression.LispNumber.ONE;
|
||||||
|
|
||||||
@FunctionNames({ "*" })
|
@FunctionNames({ "*" })
|
||||||
public class MULTIPLY extends LispFunction {
|
public class MULTIPLY extends LispFunction {
|
||||||
|
|
||||||
|
@ -30,5 +30,4 @@ public class MULTIPLY extends LispFunction {
|
||||||
private LispNumber multiply(LispNumber number1, LispNumber number2) {
|
private LispNumber multiply(LispNumber number1, LispNumber number2) {
|
||||||
return new LispNumber(number1.getValue().multiply(number2.getValue()));
|
return new LispNumber(number1.getValue().multiply(number2.getValue()));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,16 +1,16 @@
|
||||||
package function.builtin.math;
|
package function.builtin.math;
|
||||||
|
|
||||||
import static recursion.TailCalls.done;
|
|
||||||
import static recursion.TailCalls.tailCall;
|
|
||||||
|
|
||||||
import java.util.function.BiFunction;
|
|
||||||
import java.util.function.Function;
|
|
||||||
|
|
||||||
import recursion.TailCall;
|
import recursion.TailCall;
|
||||||
import sexpression.Cons;
|
import sexpression.Cons;
|
||||||
import sexpression.LispNumber;
|
import sexpression.LispNumber;
|
||||||
import sexpression.SExpression;
|
import sexpression.SExpression;
|
||||||
|
|
||||||
|
import java.util.function.BiFunction;
|
||||||
|
import java.util.function.Function;
|
||||||
|
|
||||||
|
import static recursion.TailCalls.done;
|
||||||
|
import static recursion.TailCalls.tailCall;
|
||||||
|
|
||||||
class MathFunction {
|
class MathFunction {
|
||||||
|
|
||||||
Function<LispNumber, LispNumber> singleValueOperation;
|
Function<LispNumber, LispNumber> singleValueOperation;
|
||||||
|
@ -40,5 +40,4 @@ class MathFunction {
|
||||||
|
|
||||||
return tailCall(() -> callTailRecursive(new Cons(operationResult, remainingNumbers)));
|
return tailCall(() -> callTailRecursive(new Cons(operationResult, remainingNumbers)));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,13 +1,13 @@
|
||||||
package function.builtin.math;
|
package function.builtin.math;
|
||||||
|
|
||||||
import static sexpression.LispNumber.ZERO;
|
|
||||||
|
|
||||||
import function.ArgumentValidator;
|
import function.ArgumentValidator;
|
||||||
import function.FunctionNames;
|
import function.FunctionNames;
|
||||||
import function.LispFunction;
|
import function.LispFunction;
|
||||||
import sexpression.Cons;
|
import sexpression.Cons;
|
||||||
import sexpression.LispNumber;
|
import sexpression.LispNumber;
|
||||||
|
|
||||||
|
import static sexpression.LispNumber.ZERO;
|
||||||
|
|
||||||
@FunctionNames({ "+" })
|
@FunctionNames({ "+" })
|
||||||
public class PLUS extends LispFunction {
|
public class PLUS extends LispFunction {
|
||||||
|
|
||||||
|
@ -30,5 +30,4 @@ public class PLUS extends LispFunction {
|
||||||
private LispNumber add(LispNumber number1, LispNumber number2) {
|
private LispNumber add(LispNumber number1, LispNumber number2) {
|
||||||
return new LispNumber(number1.getValue().add(number2.getValue()));
|
return new LispNumber(number1.getValue().add(number2.getValue()));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -31,5 +31,4 @@ public class REMAINDER extends LispFunction {
|
||||||
throw new DivideByZeroException();
|
throw new DivideByZeroException();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,14 +1,14 @@
|
||||||
package function.builtin.predicate;
|
package function.builtin.predicate;
|
||||||
|
|
||||||
import static sexpression.Nil.NIL;
|
|
||||||
import static sexpression.Symbol.T;
|
|
||||||
|
|
||||||
import function.ArgumentValidator;
|
import function.ArgumentValidator;
|
||||||
import function.FunctionNames;
|
import function.FunctionNames;
|
||||||
import function.LispFunction;
|
import function.LispFunction;
|
||||||
import sexpression.Cons;
|
import sexpression.Cons;
|
||||||
import sexpression.SExpression;
|
import sexpression.SExpression;
|
||||||
|
|
||||||
|
import static sexpression.Nil.NIL;
|
||||||
|
import static sexpression.Symbol.T;
|
||||||
|
|
||||||
@FunctionNames({ "ATOM", "ATOM?" })
|
@FunctionNames({ "ATOM", "ATOM?" })
|
||||||
public class ATOM extends LispFunction {
|
public class ATOM extends LispFunction {
|
||||||
|
|
||||||
|
@ -26,5 +26,4 @@ public class ATOM extends LispFunction {
|
||||||
|
|
||||||
return argument.isAtom() ? T : NIL;
|
return argument.isAtom() ? T : NIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,14 +1,14 @@
|
||||||
package function.builtin.predicate;
|
package function.builtin.predicate;
|
||||||
|
|
||||||
import static sexpression.Nil.NIL;
|
|
||||||
import static sexpression.Symbol.T;
|
|
||||||
|
|
||||||
import function.ArgumentValidator;
|
import function.ArgumentValidator;
|
||||||
import function.FunctionNames;
|
import function.FunctionNames;
|
||||||
import function.LispFunction;
|
import function.LispFunction;
|
||||||
import sexpression.Cons;
|
import sexpression.Cons;
|
||||||
import sexpression.SExpression;
|
import sexpression.SExpression;
|
||||||
|
|
||||||
|
import static sexpression.Nil.NIL;
|
||||||
|
import static sexpression.Symbol.T;
|
||||||
|
|
||||||
@FunctionNames({ "EQ", "EQ?" })
|
@FunctionNames({ "EQ", "EQ?" })
|
||||||
public class EQ extends LispFunction {
|
public class EQ extends LispFunction {
|
||||||
|
|
||||||
|
@ -52,5 +52,4 @@ public class EQ extends LispFunction {
|
||||||
private SExpression listEq(SExpression firstArgument, SExpression secondArgument) {
|
private SExpression listEq(SExpression firstArgument, SExpression secondArgument) {
|
||||||
return (firstArgument == secondArgument) ? T : NIL;
|
return (firstArgument == secondArgument) ? T : NIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,14 +1,14 @@
|
||||||
package function.builtin.predicate;
|
package function.builtin.predicate;
|
||||||
|
|
||||||
import static sexpression.Nil.NIL;
|
|
||||||
import static sexpression.Symbol.T;
|
|
||||||
|
|
||||||
import function.ArgumentValidator;
|
import function.ArgumentValidator;
|
||||||
import function.FunctionNames;
|
import function.FunctionNames;
|
||||||
import function.LispFunction;
|
import function.LispFunction;
|
||||||
import sexpression.Cons;
|
import sexpression.Cons;
|
||||||
import sexpression.SExpression;
|
import sexpression.SExpression;
|
||||||
|
|
||||||
|
import static sexpression.Nil.NIL;
|
||||||
|
import static sexpression.Symbol.T;
|
||||||
|
|
||||||
@FunctionNames({ "EQUAL", "EQUAL?" })
|
@FunctionNames({ "EQUAL", "EQUAL?" })
|
||||||
public class EQUAL extends LispFunction {
|
public class EQUAL extends LispFunction {
|
||||||
|
|
||||||
|
@ -37,5 +37,4 @@ public class EQUAL extends LispFunction {
|
||||||
private SExpression equal(SExpression firstArgument, SExpression secondArgument) {
|
private SExpression equal(SExpression firstArgument, SExpression secondArgument) {
|
||||||
return isEqual(firstArgument, secondArgument) ? T : NIL;
|
return isEqual(firstArgument, secondArgument) ? T : NIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,8 +1,10 @@
|
||||||
package function.builtin.predicate;
|
package function.builtin.predicate;
|
||||||
|
|
||||||
import static function.builtin.GENSYM.GENSYM_PREFIX;
|
import function.ArgumentValidator;
|
||||||
import static sexpression.Nil.NIL;
|
import function.FunctionNames;
|
||||||
import static sexpression.Symbol.T;
|
import function.LispFunction;
|
||||||
|
import sexpression.Cons;
|
||||||
|
import sexpression.SExpression;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
@ -10,11 +12,9 @@ import java.util.Map.Entry;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
import function.ArgumentValidator;
|
import static function.builtin.GENSYM.GENSYM_PREFIX;
|
||||||
import function.FunctionNames;
|
import static sexpression.Nil.NIL;
|
||||||
import function.LispFunction;
|
import static sexpression.Symbol.T;
|
||||||
import sexpression.Cons;
|
|
||||||
import sexpression.SExpression;
|
|
||||||
|
|
||||||
@FunctionNames({ "GENSYM-EQUAL", "GENSYM-EQUAL?" })
|
@FunctionNames({ "GENSYM-EQUAL", "GENSYM-EQUAL?" })
|
||||||
public class GENSYM_EQUAL extends LispFunction {
|
public class GENSYM_EQUAL extends LispFunction {
|
||||||
|
@ -97,5 +97,4 @@ public class GENSYM_EQUAL extends LispFunction {
|
||||||
return equalizedExpression;
|
return equalizedExpression;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,14 +1,14 @@
|
||||||
package function.builtin.predicate;
|
package function.builtin.predicate;
|
||||||
|
|
||||||
import static sexpression.Nil.NIL;
|
|
||||||
import static sexpression.Symbol.T;
|
|
||||||
|
|
||||||
import function.ArgumentValidator;
|
import function.ArgumentValidator;
|
||||||
import function.FunctionNames;
|
import function.FunctionNames;
|
||||||
import function.LispFunction;
|
import function.LispFunction;
|
||||||
import sexpression.Cons;
|
import sexpression.Cons;
|
||||||
import sexpression.SExpression;
|
import sexpression.SExpression;
|
||||||
|
|
||||||
|
import static sexpression.Nil.NIL;
|
||||||
|
import static sexpression.Symbol.T;
|
||||||
|
|
||||||
@FunctionNames({ "LISTP", "LIST?" })
|
@FunctionNames({ "LISTP", "LIST?" })
|
||||||
public class LISTP extends LispFunction {
|
public class LISTP extends LispFunction {
|
||||||
|
|
||||||
|
@ -25,5 +25,4 @@ public class LISTP extends LispFunction {
|
||||||
|
|
||||||
return argumentList.getFirst().isList() ? T : NIL;
|
return argumentList.getFirst().isList() ? T : NIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,14 +1,14 @@
|
||||||
package function.builtin.predicate;
|
package function.builtin.predicate;
|
||||||
|
|
||||||
import static sexpression.Nil.NIL;
|
|
||||||
import static sexpression.Symbol.T;
|
|
||||||
|
|
||||||
import function.ArgumentValidator;
|
import function.ArgumentValidator;
|
||||||
import function.FunctionNames;
|
import function.FunctionNames;
|
||||||
import function.LispFunction;
|
import function.LispFunction;
|
||||||
import sexpression.Cons;
|
import sexpression.Cons;
|
||||||
import sexpression.SExpression;
|
import sexpression.SExpression;
|
||||||
|
|
||||||
|
import static sexpression.Nil.NIL;
|
||||||
|
import static sexpression.Symbol.T;
|
||||||
|
|
||||||
@FunctionNames({ "NULL", "NULL?" })
|
@FunctionNames({ "NULL", "NULL?" })
|
||||||
public class NULL extends LispFunction {
|
public class NULL extends LispFunction {
|
||||||
|
|
||||||
|
@ -25,5 +25,4 @@ public class NULL extends LispFunction {
|
||||||
|
|
||||||
return argumentList.getFirst().isNull() ? T : NIL;
|
return argumentList.getFirst().isNull() ? T : NIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,10 +1,5 @@
|
||||||
package function.builtin.predicate;
|
package function.builtin.predicate;
|
||||||
|
|
||||||
import static recursion.TailCalls.done;
|
|
||||||
import static recursion.TailCalls.tailCall;
|
|
||||||
import static sexpression.Nil.NIL;
|
|
||||||
import static sexpression.Symbol.T;
|
|
||||||
|
|
||||||
import function.ArgumentValidator;
|
import function.ArgumentValidator;
|
||||||
import function.FunctionNames;
|
import function.FunctionNames;
|
||||||
import function.LispFunction;
|
import function.LispFunction;
|
||||||
|
@ -13,6 +8,11 @@ import sexpression.Cons;
|
||||||
import sexpression.LispNumber;
|
import sexpression.LispNumber;
|
||||||
import sexpression.SExpression;
|
import sexpression.SExpression;
|
||||||
|
|
||||||
|
import static recursion.TailCalls.done;
|
||||||
|
import static recursion.TailCalls.tailCall;
|
||||||
|
import static sexpression.Nil.NIL;
|
||||||
|
import static sexpression.Symbol.T;
|
||||||
|
|
||||||
@FunctionNames({ "=" })
|
@FunctionNames({ "=" })
|
||||||
public class NUMERIC_EQUAL extends LispFunction {
|
public class NUMERIC_EQUAL extends LispFunction {
|
||||||
|
|
||||||
|
@ -51,5 +51,4 @@ public class NUMERIC_EQUAL extends LispFunction {
|
||||||
private boolean isEqual(LispNumber number1, LispNumber number2) {
|
private boolean isEqual(LispNumber number1, LispNumber number2) {
|
||||||
return number1.getValue().equals(number2.getValue());
|
return number1.getValue().equals(number2.getValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,10 +1,5 @@
|
||||||
package function.builtin.predicate;
|
package function.builtin.predicate;
|
||||||
|
|
||||||
import static recursion.TailCalls.done;
|
|
||||||
import static recursion.TailCalls.tailCall;
|
|
||||||
import static sexpression.Nil.NIL;
|
|
||||||
import static sexpression.Symbol.T;
|
|
||||||
|
|
||||||
import function.ArgumentValidator;
|
import function.ArgumentValidator;
|
||||||
import function.FunctionNames;
|
import function.FunctionNames;
|
||||||
import function.LispFunction;
|
import function.LispFunction;
|
||||||
|
@ -13,6 +8,11 @@ import sexpression.Cons;
|
||||||
import sexpression.LispNumber;
|
import sexpression.LispNumber;
|
||||||
import sexpression.SExpression;
|
import sexpression.SExpression;
|
||||||
|
|
||||||
|
import static recursion.TailCalls.done;
|
||||||
|
import static recursion.TailCalls.tailCall;
|
||||||
|
import static sexpression.Nil.NIL;
|
||||||
|
import static sexpression.Symbol.T;
|
||||||
|
|
||||||
@FunctionNames({ ">" })
|
@FunctionNames({ ">" })
|
||||||
public class NUMERIC_GREATER extends LispFunction {
|
public class NUMERIC_GREATER extends LispFunction {
|
||||||
|
|
||||||
|
@ -51,5 +51,4 @@ public class NUMERIC_GREATER extends LispFunction {
|
||||||
private boolean isFirstGreater(LispNumber number1, LispNumber number2) {
|
private boolean isFirstGreater(LispNumber number1, LispNumber number2) {
|
||||||
return number1.getValue().compareTo(number2.getValue()) > 0;
|
return number1.getValue().compareTo(number2.getValue()) > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,10 +1,5 @@
|
||||||
package function.builtin.predicate;
|
package function.builtin.predicate;
|
||||||
|
|
||||||
import static recursion.TailCalls.done;
|
|
||||||
import static recursion.TailCalls.tailCall;
|
|
||||||
import static sexpression.Nil.NIL;
|
|
||||||
import static sexpression.Symbol.T;
|
|
||||||
|
|
||||||
import function.ArgumentValidator;
|
import function.ArgumentValidator;
|
||||||
import function.FunctionNames;
|
import function.FunctionNames;
|
||||||
import function.LispFunction;
|
import function.LispFunction;
|
||||||
|
@ -13,6 +8,11 @@ import sexpression.Cons;
|
||||||
import sexpression.LispNumber;
|
import sexpression.LispNumber;
|
||||||
import sexpression.SExpression;
|
import sexpression.SExpression;
|
||||||
|
|
||||||
|
import static recursion.TailCalls.done;
|
||||||
|
import static recursion.TailCalls.tailCall;
|
||||||
|
import static sexpression.Nil.NIL;
|
||||||
|
import static sexpression.Symbol.T;
|
||||||
|
|
||||||
@FunctionNames({ "<" })
|
@FunctionNames({ "<" })
|
||||||
public class NUMERIC_LESS extends LispFunction {
|
public class NUMERIC_LESS extends LispFunction {
|
||||||
|
|
||||||
|
@ -51,5 +51,4 @@ public class NUMERIC_LESS extends LispFunction {
|
||||||
private boolean isFirstLesser(LispNumber number1, LispNumber number2) {
|
private boolean isFirstLesser(LispNumber number1, LispNumber number2) {
|
||||||
return number1.getValue().compareTo(number2.getValue()) < 0;
|
return number1.getValue().compareTo(number2.getValue()) < 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,10 +1,5 @@
|
||||||
package function.builtin.special;
|
package function.builtin.special;
|
||||||
|
|
||||||
import static function.builtin.EVAL.eval;
|
|
||||||
import static recursion.TailCalls.done;
|
|
||||||
import static recursion.TailCalls.tailCall;
|
|
||||||
import static sexpression.Symbol.T;
|
|
||||||
|
|
||||||
import function.ArgumentValidator;
|
import function.ArgumentValidator;
|
||||||
import function.FunctionNames;
|
import function.FunctionNames;
|
||||||
import function.LispSpecialFunction;
|
import function.LispSpecialFunction;
|
||||||
|
@ -12,6 +7,11 @@ import recursion.TailCall;
|
||||||
import sexpression.Cons;
|
import sexpression.Cons;
|
||||||
import sexpression.SExpression;
|
import sexpression.SExpression;
|
||||||
|
|
||||||
|
import static function.builtin.EVAL.eval;
|
||||||
|
import static recursion.TailCalls.done;
|
||||||
|
import static recursion.TailCalls.tailCall;
|
||||||
|
import static sexpression.Symbol.T;
|
||||||
|
|
||||||
@FunctionNames({ "AND" })
|
@FunctionNames({ "AND" })
|
||||||
public class AND extends LispSpecialFunction {
|
public class AND extends LispSpecialFunction {
|
||||||
|
|
||||||
|
@ -40,5 +40,4 @@ public class AND extends LispSpecialFunction {
|
||||||
|
|
||||||
return tailCall(() -> callTailRecursive(remainingValues, currentValue));
|
return tailCall(() -> callTailRecursive(remainingValues, currentValue));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,12 +1,5 @@
|
||||||
package function.builtin.special;
|
package function.builtin.special;
|
||||||
|
|
||||||
import static function.builtin.EVAL.eval;
|
|
||||||
import static function.builtin.predicate.EQUAL.isEqual;
|
|
||||||
import static recursion.TailCalls.done;
|
|
||||||
import static recursion.TailCalls.tailCall;
|
|
||||||
import static sexpression.Nil.NIL;
|
|
||||||
import static sexpression.Symbol.T;
|
|
||||||
|
|
||||||
import function.ArgumentValidator;
|
import function.ArgumentValidator;
|
||||||
import function.FunctionNames;
|
import function.FunctionNames;
|
||||||
import function.LispSpecialFunction;
|
import function.LispSpecialFunction;
|
||||||
|
@ -15,6 +8,13 @@ import sexpression.Cons;
|
||||||
import sexpression.Nil;
|
import sexpression.Nil;
|
||||||
import sexpression.SExpression;
|
import sexpression.SExpression;
|
||||||
|
|
||||||
|
import static function.builtin.EVAL.eval;
|
||||||
|
import static function.builtin.predicate.EQUAL.isEqual;
|
||||||
|
import static recursion.TailCalls.done;
|
||||||
|
import static recursion.TailCalls.tailCall;
|
||||||
|
import static sexpression.Nil.NIL;
|
||||||
|
import static sexpression.Symbol.T;
|
||||||
|
|
||||||
@FunctionNames({ "CASE" })
|
@FunctionNames({ "CASE" })
|
||||||
public class CASE extends LispSpecialFunction {
|
public class CASE extends LispSpecialFunction {
|
||||||
|
|
||||||
|
@ -82,5 +82,4 @@ public class CASE extends LispSpecialFunction {
|
||||||
|
|
||||||
return lastConsequentValue;
|
return lastConsequentValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,10 +1,5 @@
|
||||||
package function.builtin.special;
|
package function.builtin.special;
|
||||||
|
|
||||||
import static function.builtin.EVAL.eval;
|
|
||||||
import static recursion.TailCalls.done;
|
|
||||||
import static recursion.TailCalls.tailCall;
|
|
||||||
import static sexpression.Nil.NIL;
|
|
||||||
|
|
||||||
import function.ArgumentValidator;
|
import function.ArgumentValidator;
|
||||||
import function.FunctionNames;
|
import function.FunctionNames;
|
||||||
import function.LispSpecialFunction;
|
import function.LispSpecialFunction;
|
||||||
|
@ -13,6 +8,11 @@ import sexpression.Cons;
|
||||||
import sexpression.Nil;
|
import sexpression.Nil;
|
||||||
import sexpression.SExpression;
|
import sexpression.SExpression;
|
||||||
|
|
||||||
|
import static function.builtin.EVAL.eval;
|
||||||
|
import static recursion.TailCalls.done;
|
||||||
|
import static recursion.TailCalls.tailCall;
|
||||||
|
import static sexpression.Nil.NIL;
|
||||||
|
|
||||||
@FunctionNames({ "COND" })
|
@FunctionNames({ "COND" })
|
||||||
public class COND extends LispSpecialFunction {
|
public class COND extends LispSpecialFunction {
|
||||||
|
|
||||||
|
@ -65,5 +65,4 @@ public class COND extends LispSpecialFunction {
|
||||||
private SExpression getFirst(SExpression knownCons) {
|
private SExpression getFirst(SExpression knownCons) {
|
||||||
return ((Cons) knownCons).getFirst();
|
return ((Cons) knownCons).getFirst();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -17,5 +17,4 @@ public class DEFINE_SPECIAL extends Define {
|
||||||
protected UserDefinedFunction createFunction(SExpression functionName, Cons lambdaList, Cons functionBody) {
|
protected UserDefinedFunction createFunction(SExpression functionName, Cons lambdaList, Cons functionBody) {
|
||||||
return new UserDefinedSpecialFunction(functionName.toString(), lambdaList, functionBody);
|
return new UserDefinedSpecialFunction(functionName.toString(), lambdaList, functionBody);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -17,5 +17,4 @@ public class DEFMACRO extends Define {
|
||||||
protected UserDefinedFunction createFunction(SExpression functionName, Cons lambdaList, Cons functionBody) {
|
protected UserDefinedFunction createFunction(SExpression functionName, Cons lambdaList, Cons functionBody) {
|
||||||
return new UserDefinedMacro(functionName.toString(), lambdaList, functionBody);
|
return new UserDefinedMacro(functionName.toString(), lambdaList, functionBody);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -16,5 +16,4 @@ public class DEFUN extends Define {
|
||||||
protected UserDefinedFunction createFunction(SExpression functionName, Cons lambdaList, Cons functionBody) {
|
protected UserDefinedFunction createFunction(SExpression functionName, Cons lambdaList, Cons functionBody) {
|
||||||
return new UserDefinedFunction(functionName.toString(), lambdaList, functionBody);
|
return new UserDefinedFunction(functionName.toString(), lambdaList, functionBody);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,10 +1,5 @@
|
||||||
package function.builtin.special;
|
package function.builtin.special;
|
||||||
|
|
||||||
import static function.builtin.cons.LIST.makeList;
|
|
||||||
import static java.text.MessageFormat.format;
|
|
||||||
import static table.FunctionTable.defineFunction;
|
|
||||||
import static table.FunctionTable.isAlreadyDefined;
|
|
||||||
|
|
||||||
import environment.RuntimeEnvironment;
|
import environment.RuntimeEnvironment;
|
||||||
import error.LispWarning;
|
import error.LispWarning;
|
||||||
import function.ArgumentValidator;
|
import function.ArgumentValidator;
|
||||||
|
@ -14,6 +9,11 @@ import sexpression.Cons;
|
||||||
import sexpression.SExpression;
|
import sexpression.SExpression;
|
||||||
import sexpression.Symbol;
|
import sexpression.Symbol;
|
||||||
|
|
||||||
|
import static function.builtin.cons.LIST.makeList;
|
||||||
|
import static java.text.MessageFormat.format;
|
||||||
|
import static table.FunctionTable.defineFunction;
|
||||||
|
import static table.FunctionTable.isAlreadyDefined;
|
||||||
|
|
||||||
public abstract class Define extends LispSpecialFunction {
|
public abstract class Define extends LispSpecialFunction {
|
||||||
|
|
||||||
private ArgumentValidator argumentValidator;
|
private ArgumentValidator argumentValidator;
|
||||||
|
@ -74,5 +74,4 @@ public abstract class Define extends LispSpecialFunction {
|
||||||
return format("redefining function {0}", functionName);
|
return format("redefining function {0}", functionName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,13 +1,13 @@
|
||||||
package function.builtin.special;
|
package function.builtin.special;
|
||||||
|
|
||||||
import static function.builtin.EVAL.eval;
|
|
||||||
|
|
||||||
import function.ArgumentValidator;
|
import function.ArgumentValidator;
|
||||||
import function.FunctionNames;
|
import function.FunctionNames;
|
||||||
import function.LispSpecialFunction;
|
import function.LispSpecialFunction;
|
||||||
import sexpression.Cons;
|
import sexpression.Cons;
|
||||||
import sexpression.SExpression;
|
import sexpression.SExpression;
|
||||||
|
|
||||||
|
import static function.builtin.EVAL.eval;
|
||||||
|
|
||||||
@FunctionNames({ "IF" })
|
@FunctionNames({ "IF" })
|
||||||
public class IF extends LispSpecialFunction {
|
public class IF extends LispSpecialFunction {
|
||||||
|
|
||||||
|
@ -49,5 +49,4 @@ public class IF extends LispSpecialFunction {
|
||||||
|
|
||||||
return getRestOfList(expressions).getFirst();
|
return getRestOfList(expressions).getFirst();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -0,0 +1,67 @@
|
||||||
|
package function.builtin.special
|
||||||
|
|
||||||
|
import function.ArgumentValidator
|
||||||
|
import function.FunctionNames
|
||||||
|
import function.LispSpecialFunction
|
||||||
|
import function.UserDefinedFunction
|
||||||
|
import function.builtin.cons.LIST.makeList
|
||||||
|
import sexpression.Cons
|
||||||
|
import sexpression.LambdaExpression
|
||||||
|
import sexpression.SExpression
|
||||||
|
import sexpression.Symbol
|
||||||
|
|
||||||
|
@FunctionNames("LAMBDA", "Λ")
|
||||||
|
class LAMBDA(name: String) : LispSpecialFunction() {
|
||||||
|
|
||||||
|
private val argumentValidator: ArgumentValidator = ArgumentValidator(name)
|
||||||
|
private val lambdaListValidator: ArgumentValidator = ArgumentValidator("$name|lambda-list|")
|
||||||
|
|
||||||
|
init {
|
||||||
|
this.argumentValidator.setFirstArgumentExpectedType(Cons::class.java)
|
||||||
|
this.argumentValidator.setMinimumNumberOfArguments(1)
|
||||||
|
this.lambdaListValidator.setEveryArgumentExpectedType(Symbol::class.java)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun call(argumentList: Cons): LambdaExpression {
|
||||||
|
argumentValidator.validate(argumentList)
|
||||||
|
|
||||||
|
val first = argumentList.first
|
||||||
|
val lambdaList = first as Cons
|
||||||
|
val body = argumentList.rest as Cons
|
||||||
|
|
||||||
|
lambdaListValidator.validate(lambdaList)
|
||||||
|
|
||||||
|
val function = UserDefinedFunction(":LAMBDA", lambdaList, body)
|
||||||
|
|
||||||
|
return LambdaExpression(makeOriginalLambdaExpression(argumentList), function)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun makeOriginalLambdaExpression(argumentList: Cons): Cons {
|
||||||
|
return Cons(Symbol("LAMBDA"), argumentList)
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
|
||||||
|
fun isLambdaExpression(sexpr: SExpression): Boolean {
|
||||||
|
if (sexpr.isCons) {
|
||||||
|
val first = (sexpr as Cons).first.toString()
|
||||||
|
|
||||||
|
return "LAMBDA" == first || "Λ" == first
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
fun createFunction(lambdaExpression: Cons): UserDefinedFunction {
|
||||||
|
val rest = lambdaExpression.rest
|
||||||
|
|
||||||
|
val lambdaValidator = ArgumentValidator("LAMBDA|create|")
|
||||||
|
lambdaValidator.setEveryArgumentExpectedType(Cons::class.java)
|
||||||
|
lambdaValidator.validate(makeList(rest))
|
||||||
|
|
||||||
|
val lambda = LAMBDA("LAMBDA").call(rest as Cons)
|
||||||
|
|
||||||
|
return lambda.function
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,8 +1,5 @@
|
||||||
package function.builtin.special;
|
package function.builtin.special;
|
||||||
|
|
||||||
import static function.builtin.EVAL.eval;
|
|
||||||
import static sexpression.Nil.NIL;
|
|
||||||
|
|
||||||
import function.ArgumentValidator;
|
import function.ArgumentValidator;
|
||||||
import function.FunctionNames;
|
import function.FunctionNames;
|
||||||
import function.LispSpecialFunction;
|
import function.LispSpecialFunction;
|
||||||
|
@ -12,6 +9,9 @@ import sexpression.Symbol;
|
||||||
import table.ExecutionContext;
|
import table.ExecutionContext;
|
||||||
import table.SymbolTable;
|
import table.SymbolTable;
|
||||||
|
|
||||||
|
import static function.builtin.EVAL.eval;
|
||||||
|
import static sexpression.Nil.NIL;
|
||||||
|
|
||||||
@FunctionNames({ "LET" })
|
@FunctionNames({ "LET" })
|
||||||
public class LET extends LispSpecialFunction {
|
public class LET extends LispSpecialFunction {
|
||||||
|
|
||||||
|
@ -90,5 +90,4 @@ public class LET extends LispSpecialFunction {
|
||||||
private void restorePreviousScope(SymbolTable localScope) {
|
private void restorePreviousScope(SymbolTable localScope) {
|
||||||
executionContext.setScope(localScope.getParent());
|
executionContext.setScope(localScope.getParent());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -19,5 +19,4 @@ public class LET_STAR extends LET {
|
||||||
|
|
||||||
return localScope;
|
return localScope;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,9 +1,5 @@
|
||||||
package function.builtin.special;
|
package function.builtin.special;
|
||||||
|
|
||||||
import static function.builtin.EVAL.eval;
|
|
||||||
import static recursion.TailCalls.done;
|
|
||||||
import static recursion.TailCalls.tailCall;
|
|
||||||
|
|
||||||
import function.ArgumentValidator;
|
import function.ArgumentValidator;
|
||||||
import function.FunctionNames;
|
import function.FunctionNames;
|
||||||
import function.LispSpecialFunction;
|
import function.LispSpecialFunction;
|
||||||
|
@ -11,6 +7,10 @@ import recursion.TailCall;
|
||||||
import sexpression.Cons;
|
import sexpression.Cons;
|
||||||
import sexpression.SExpression;
|
import sexpression.SExpression;
|
||||||
|
|
||||||
|
import static function.builtin.EVAL.eval;
|
||||||
|
import static recursion.TailCalls.done;
|
||||||
|
import static recursion.TailCalls.tailCall;
|
||||||
|
|
||||||
@FunctionNames({ "OR" })
|
@FunctionNames({ "OR" })
|
||||||
public class OR extends LispSpecialFunction {
|
public class OR extends LispSpecialFunction {
|
||||||
|
|
||||||
|
@ -36,5 +36,4 @@ public class OR extends LispSpecialFunction {
|
||||||
|
|
||||||
return tailCall(() -> callTailRecursive(remainingValues));
|
return tailCall(() -> callTailRecursive(remainingValues));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,10 +1,5 @@
|
||||||
package function.builtin.special;
|
package function.builtin.special;
|
||||||
|
|
||||||
import static function.builtin.EVAL.eval;
|
|
||||||
import static recursion.TailCalls.done;
|
|
||||||
import static recursion.TailCalls.tailCall;
|
|
||||||
import static sexpression.Nil.NIL;
|
|
||||||
|
|
||||||
import function.ArgumentValidator;
|
import function.ArgumentValidator;
|
||||||
import function.FunctionNames;
|
import function.FunctionNames;
|
||||||
import function.LispSpecialFunction;
|
import function.LispSpecialFunction;
|
||||||
|
@ -12,6 +7,11 @@ import recursion.TailCall;
|
||||||
import sexpression.Cons;
|
import sexpression.Cons;
|
||||||
import sexpression.SExpression;
|
import sexpression.SExpression;
|
||||||
|
|
||||||
|
import static function.builtin.EVAL.eval;
|
||||||
|
import static recursion.TailCalls.done;
|
||||||
|
import static recursion.TailCalls.tailCall;
|
||||||
|
import static sexpression.Nil.NIL;
|
||||||
|
|
||||||
@FunctionNames({ "PROGN", "BEGIN" })
|
@FunctionNames({ "PROGN", "BEGIN" })
|
||||||
public class PROGN extends LispSpecialFunction {
|
public class PROGN extends LispSpecialFunction {
|
||||||
|
|
||||||
|
@ -37,5 +37,4 @@ public class PROGN extends LispSpecialFunction {
|
||||||
|
|
||||||
return tailCall(() -> callTailRecursive(remainingValues, currentValue));
|
return tailCall(() -> callTailRecursive(remainingValues, currentValue));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -22,5 +22,4 @@ public class QUOTE extends LispSpecialFunction {
|
||||||
|
|
||||||
return argumentList.getFirst();
|
return argumentList.getFirst();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,7 +1,5 @@
|
||||||
package function.builtin.special;
|
package function.builtin.special;
|
||||||
|
|
||||||
import static function.builtin.EVAL.evaluateFunctionArgumentList;
|
|
||||||
|
|
||||||
import error.LispException;
|
import error.LispException;
|
||||||
import function.ArgumentValidator;
|
import function.ArgumentValidator;
|
||||||
import function.FunctionNames;
|
import function.FunctionNames;
|
||||||
|
@ -10,6 +8,8 @@ import sexpression.Cons;
|
||||||
import sexpression.SExpression;
|
import sexpression.SExpression;
|
||||||
import table.ExecutionContext;
|
import table.ExecutionContext;
|
||||||
|
|
||||||
|
import static function.builtin.EVAL.evaluateFunctionArgumentList;
|
||||||
|
|
||||||
@FunctionNames({ "RECUR" })
|
@FunctionNames({ "RECUR" })
|
||||||
public class RECUR extends LispSpecialFunction {
|
public class RECUR extends LispSpecialFunction {
|
||||||
|
|
||||||
|
@ -87,5 +87,4 @@ public class RECUR extends LispSpecialFunction {
|
||||||
return "recur not in tail position";
|
return "recur not in tail position";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,9 +1,5 @@
|
||||||
package function.builtin.special;
|
package function.builtin.special;
|
||||||
|
|
||||||
import static function.builtin.EVAL.eval;
|
|
||||||
import static function.builtin.SET.set;
|
|
||||||
import static function.builtin.cons.LIST.makeList;
|
|
||||||
|
|
||||||
import function.ArgumentValidator;
|
import function.ArgumentValidator;
|
||||||
import function.FunctionNames;
|
import function.FunctionNames;
|
||||||
import function.LispSpecialFunction;
|
import function.LispSpecialFunction;
|
||||||
|
@ -11,6 +7,10 @@ import sexpression.Cons;
|
||||||
import sexpression.SExpression;
|
import sexpression.SExpression;
|
||||||
import sexpression.Symbol;
|
import sexpression.Symbol;
|
||||||
|
|
||||||
|
import static function.builtin.EVAL.eval;
|
||||||
|
import static function.builtin.SET.set;
|
||||||
|
import static function.builtin.cons.LIST.makeList;
|
||||||
|
|
||||||
@FunctionNames({ "SETQ" })
|
@FunctionNames({ "SETQ" })
|
||||||
public class SETQ extends LispSpecialFunction {
|
public class SETQ extends LispSpecialFunction {
|
||||||
|
|
||||||
|
@ -35,5 +35,4 @@ public class SETQ extends LispSpecialFunction {
|
||||||
|
|
||||||
return new Cons(argumentList.getFirst(), makeList(value));
|
return new Cons(argumentList.getFirst(), makeList(value));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -25,5 +25,4 @@ public class FileLispInterpreter extends LispInterpreter {
|
||||||
|
|
||||||
super.applyFinishingTouches();
|
super.applyFinishingTouches();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -21,5 +21,4 @@ public class InteractiveLispInterpreter extends LispInterpreter {
|
||||||
environment.getOutput().println(environment.decoratePrompt(""));
|
environment.getOutput().println(environment.decoratePrompt(""));
|
||||||
environment.getOutput().flush();
|
environment.getOutput().flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue