Compare commits

...

2 Commits

Author SHA1 Message Date
e95c8e5018 update submodule 2025-10-25 10:42:59 -07:00
ad1d7266b8 /save 2025-10-25 10:42:49 -07:00
2 changed files with 43 additions and 10 deletions

View File

@ -2,7 +2,8 @@
import { Compiler } from '../src/compiler/compiler'
import { VM, type Value, Scope, bytecodeToString } from 'reefvm'
import * as readline from 'node:readline'
import * as readline from 'readline'
import * as fs from 'fs'
const colors = {
reset: '\x1b[0m',
@ -18,7 +19,7 @@ const colors = {
}
async function repl() {
const commands = ['/clear', '/reset', '/vars', '/funcs', '/history', '/bytecode', '/exit', '/quit']
const commands = ['/clear', '/reset', '/vars', '/funcs', '/history', '/bytecode', '/exit', '/save', '/quit']
function completer(line: string): [string[], string] {
if (line.startsWith('/')) {
@ -115,6 +116,37 @@ async function repl() {
return
}
if (trimmed.startsWith('/save')) {
const parts = trimmed.split(/\s+/)
const filename = parts[1]
if (!filename) {
console.log(`\n${colors.red}Usage:${colors.reset} /save <filename>`)
rl.prompt()
return
}
if (codeHistory.length === 0) {
console.log(`\n${colors.dim}No history to save${colors.reset}`)
rl.prompt()
return
}
// Add .shrimp extension if no extension provided
const finalFilename = filename.includes('.') ? filename : `${filename}.shrimp`
const content = codeHistory.join('\n') + '\n'
try {
fs.writeFileSync(finalFilename, content, 'utf-8')
console.log(`\n${colors.green}✓${colors.reset} Saved ${codeHistory.length} line${codeHistory.length === 1 ? '' : 's'} to ${colors.bright}${finalFilename}${colors.reset}`)
} catch (error: any) {
console.log(`\n${colors.red}Error:${colors.reset} Failed to save file: ${error.message}`)
}
rl.prompt()
return
}
codeHistory.push(trimmed)
try {
@ -219,13 +251,14 @@ function showWelcome() {
)
console.log(`\nType Shrimp expressions. Press ${colors.bright}Ctrl+D${colors.reset} to exit.`)
console.log(`\nCommands:`)
console.log(` ${colors.bright}/clear${colors.reset} - Clear screen and reset state`)
console.log(` ${colors.bright}/reset${colors.reset} - Reset state (keep history visible)`)
console.log(` ${colors.bright}/vars${colors.reset} - Show all variables`)
console.log(` ${colors.bright}/funcs${colors.reset} - Show all functions`)
console.log(` ${colors.bright}/history${colors.reset} - Show code history`)
console.log(` ${colors.bright}/bytecode${colors.reset} - Show compiled bytecode`)
console.log(` ${colors.bright}/exit${colors.reset} - Quit REPL`)
console.log(` ${colors.bright}/clear${colors.reset} - Clear screen and reset state`)
console.log(` ${colors.bright}/reset${colors.reset} - Reset state (keep history visible)`)
console.log(` ${colors.bright}/vars${colors.reset} - Show all variables`)
console.log(` ${colors.bright}/funcs${colors.reset} - Show all functions`)
console.log(` ${colors.bright}/history${colors.reset} - Show code history`)
console.log(` ${colors.bright}/bytecode${colors.reset} - Show compiled bytecode`)
console.log(` ${colors.bright}/save <file>${colors.reset} - Save history to file`)
console.log(` ${colors.bright}/exit${colors.reset} - Quit REPL`)
console.log(`\nExamples:`)
console.log(` ${colors.cyan}5 + 10${colors.reset}`)
console.log(` ${colors.cyan}x = 42${colors.reset}`)

@ -1 +1 @@
Subproject commit 995487f2d5d8bb260e223ca402220c51ceba1c4a
Subproject commit 17d846b99910a46fc1c7ab98aa41ca8afbc14097