diff options
author | Gabriel Dos Reis <gdr@axiomatics.org> | 2016-02-01 01:55:33 -0800 |
---|---|---|
committer | Gabriel Dos Reis <gdr@axiomatics.org> | 2016-02-01 01:55:33 -0800 |
commit | 04be6d65c9bae10780f463c23a14922249c187de (patch) | |
tree | faf083f47c06759bf0cec6d6cced146ae435fd24 | |
parent | a41b74b5a5981d91c4e196cbcb5daa96e4123d36 (diff) | |
download | open-axiom-04be6d65c9bae10780f463c23a14922249c187de.tar.gz |
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.
-rw-r--r-- | src/boot/translator.boot | 11 | ||||
-rw-r--r-- | 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 |