62 lines
3.4 KiB
Nim
62 lines
3.4 KiB
Nim
# Copyright 2022 Mattia Giambirtone & All Contributors
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
import strformat
|
|
|
|
# These variables can be tweaked to debug and test various components of the toolchain
|
|
const debugLexer* {.booldefine.} = false # Print the tokenizer's output
|
|
const debugParser* {.booldefine.} = false # Print the AST generated by the parser
|
|
const debugCompiler* {.booldefine.} = false # Disassemble and print the bytecode generated by the compiler
|
|
const debugVM* {.booldefine.} = false # Run the VM in debug mode and show stack and instruction info
|
|
const debugGC* {.booldefine.} = false # Debug the Garbage Collector (extremely verbose)
|
|
const debugAlloc* {.booldefine.} = false # Trace object allocation (extremely verbose)
|
|
const debugMem* {.booldefine.} = false # Debug the memory allocator (extremely verbose)
|
|
const debugSerializer* {.booldefine.} = false # Validate the bytecode serializer's output
|
|
const debugStressGC* {.booldefine.} = false # Make the GC run a collection at every allocation (VERY SLOW!)
|
|
const PeonBytecodeMarker* = "PEON_BYTECODE" # Magic value at the beginning of bytecode files
|
|
const HeapGrowFactor* = 2 # The growth factor used by the GC to schedule the next collection
|
|
const FirstGC* = 1024 * 1024; # How many bytes to allocate before running the first GC
|
|
when HeapGrowFactor <= 1:
|
|
{.fatal: "Heap growth factor must be > 1".}
|
|
const PeonVersion* = (major: 0, minor: 1, patch: 0)
|
|
const PeonRelease* = "alpha"
|
|
const PeonCommitHash* = "b273cd744883458a4a6354a0cc5f4f5d0f560c31"
|
|
when len(PeonCommitHash) != 40:
|
|
{.fatal: "The git commit hash must be exactly 40 characters long".}
|
|
const PeonBranch* = "unboxed-types"
|
|
when len(PeonBranch) > 255:
|
|
{.fatal: "The git branch name's length must be less than or equal to 255 characters".}
|
|
const PeonVersionString* = &"Peon {PeonVersion.major}.{PeonVersion.minor}.{PeonVersion.patch} {PeonRelease} ({PeonBranch}, {CompileDate}, {CompileTime}, {PeonCommitHash[0..8]}) [Nim {NimVersion}] on {hostOS} ({hostCPU})"
|
|
const HelpMessage* = """The peon programming language, Copyright (C) 2022 Mattia Giambirtone & All Contributors
|
|
|
|
This program is free software, see the license distributed with this program or check
|
|
http://www.apache.org/licenses/LICENSE-2.0 for more info.
|
|
|
|
Basic usage
|
|
-----------
|
|
|
|
$ peon Opens an interactive session (REPL)
|
|
$ peon file.pn Runs the given Peon source file
|
|
|
|
Command-line options
|
|
--------------------
|
|
|
|
-h, --help Shows this help text and exits
|
|
-v, --version Prints the peon version number and exits
|
|
-s, --string Executes the passed string as if it was a file
|
|
-i, --interactive Enables interactive mode, which opens a REPL session after execution of a file or source string
|
|
-c, --nocache Disables dumping the result of bytecode compilation to files for caching
|
|
-d, --cache-delay Configures the bytecode cache invalidation threshold, in minutes (defaults to 60)
|
|
"""
|