From 04be6d65c9bae10780f463c23a14922249c187de Mon Sep 17 00:00:00 2001 From: Gabriel Dos Reis Date: Mon, 1 Feb 2016 01:55:33 -0800 Subject: Support ')read' of Boot file Allow the system command to ')read' a Boot source file: the involves (1) compiling Boot to machine code (2) loading the resulting FASL in the current system Note that if the boot file has any dependency in terms of 'import', one needs to set up the $LoadDirectories appropriately, or else the system will crash. In particular, if you're modifying OpenAxiom source files you need to include the appropriate directories containing OpenAxiom fasl files. --- src/boot/translator.boot | 11 +++++------ src/interp/cparse.boot | 12 ++++++++---- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/boot/translator.boot b/src/boot/translator.boot index b98f3b30..f44fee4c 100644 --- a/src/boot/translator.boot +++ b/src/boot/translator.boot @@ -1,6 +1,6 @@ -- Copyright (c) 1991-2002, The Numerical Algorithms Group Ltd. -- All rights reserved. --- Copyright (C) 2007-2015, Gabriel Dos Reis. +-- Copyright (C) 2007-2016, Gabriel Dos Reis. -- All rights reserved. -- -- Redistribution and use in source and binary forms, with or without @@ -40,7 +40,7 @@ import parser import ast namespace BOOTTRAN module translator (evalBootFile, loadNativeModule, loadSystemRuntimeCore, - string2BootTree, genImportDeclaration, retainFile?) + compileBootHandler, string2BootTree, genImportDeclaration, retainFile?) ++ If non nil, holds the name of the current module being translated. $currentModuleName := nil @@ -569,10 +569,9 @@ defaultBootToLispFile file == strconc(pathBasename file, '".clisp") getIntermediateLispFile(file,options) == - out := NAMESTRING getOutputPathname(options) - out ~= nil => - strconc(shoeRemoveStringIfNec(strconc('".",$faslType),out),'".clisp") - defaultBootToLispFile file + out := getOutputPathname options or return defaultBootToLispFile file + strconc(shoeRemoveStringIfNec(strconc('".",$faslType),filePathString out),'".clisp") + translateBootFile(progname, options, file) == outFile := getOutputPathname options or defaultBootToLispFile file diff --git a/src/interp/cparse.boot b/src/interp/cparse.boot index 9e28504d..a98b2ea1 100644 --- a/src/interp/cparse.boot +++ b/src/interp/cparse.boot @@ -1102,15 +1102,19 @@ _/RQ_,LIB(:x) == $Echo: local := false _/RF_-1 nil +readBootFile file == + try + fasl := compileBootHandler(nil,nil,file) or return nil + LOAD fasl + finally + fasl = nil => nil + removeFile filePathString fasl _/RF_-1 x == ifile := makeInputFilename $editFile lfile := nil type := filePathType ifile - type = '"boot" => - lfile := makeFilePath(type <- '"lisp",defaults <- ifile) - BOOT(ifile,lfile) - LOAD lfile + type = '"boot" => readBootFile ifile type = '"lisp" => LOAD ifile type = '"input" => ncINTERPFILE(ifile,$Echo) SPAD ifile -- cgit v1.2.3