## translate-raw-syntax-to-execode.api
# Compiled by:
#
src/lib/compiler/core.sublib# Trimmed to contain only compile-related stuff but no linking or execution.
# -- 07/18/2001 (blume)
### "We must beware of needless innovations,
### especially when guided by logic."
###
### -- Winston Churchill
stipulate
package acf = anormcode_form; # anormcode_form is from
src/lib/compiler/back/top/anormcode/anormcode-form.pkg package cs = code_segment; # code_segment is from
src/lib/compiler/execution/code-segments/code-segment.pkg package ds = deep_syntax; # deep_syntax is from
src/lib/compiler/front/typer-stuff/deep-syntax/deep-syntax.pkg package tmp = highcode_codetemp; # highcode_codetemp is from
src/lib/compiler/back/top/highcode/highcode-codetemp.pkg package imp = import_tree; # import_tree is from
src/lib/compiler/execution/main/import-tree.pkg package im = inlining_mapstack; # inlining_mapstack is from
src/lib/compiler/toplevel/compiler-state/inlining-mapstack.pkg package pcs = per_compile_stuff; # per_compile_stuff is from
src/lib/compiler/front/typer-stuff/main/per-compile-stuff.pkg package ph = picklehash; # picklehash is from
src/lib/compiler/front/basics/map/picklehash.pkg package pp = standard_prettyprinter; # standard_prettyprinter is from
src/lib/prettyprint/big/src/standard-prettyprinter.pkg package raw = raw_syntax; # raw_syntax is from
src/lib/compiler/front/parser/raw-syntax/raw-syntax.pkg package sci = sourcecode_info; # sourcecode_info is from
src/lib/compiler/front/basics/source/sourcecode-info.pkg package syx = symbolmapstack; # symbolmapstack is from
src/lib/compiler/front/typer-stuff/symbolmapstack/symbolmapstack.pkg package vh = varhome; # varhome is from
src/lib/compiler/front/typer-stuff/basics/varhome.pkgherein
# This API is implemented by:
#
#
src/lib/compiler/toplevel/main/translate-raw-syntax-to-execode-g.pkg #
api Translate_Raw_Syntax_To_Execode_0 {
#
Pickle; # Pickled format.
Hash; # Dictionary hash id.
Picklehash = ph::Picklehash; #
Compiledfile_Version;
make_per_compile_stuff
:
{ sourcecode_info: sci::Sourcecode_Info,
deep_syntax_transform: ds::Declaration -> ds::Declaration, # This can be used to profile or instrument code or to add debug support. This transform gets applied in
src/lib/compiler/front/typer/main/type-package-language-g.pkg prettyprinter_or_null: Null_Or( pp::Prettyprinter ),
compiler_verbosity: pcs::Compiler_Verbosity
}
->
pcs::Per_Compile_Stuff( ds::Declaration );
# Take raw_syntax_tree, do semantic checks,
# then return the new symbol table, deep_syntax_tree and pickles
#
typecheck_raw_declaration
:
{ raw_declaration: raw::Declaration, # Actual raw syntax to compile.
symbolmapstack: syx::Symbolmapstack, # Symbol table containing info from all .compiled files we depend on.
per_compile_stuff: pcs::Per_Compile_Stuff( ds::Declaration ),
compiledfile_version: Compiledfile_Version,
sourcecode_info: sci::Sourcecode_Info
}
->
{ deep_syntax_declaration: ds::Declaration, # Typechecked form of raw_declaration.
new_symbolmapstack: syx::Symbolmapstack, # A symbol table delta containing (only) stuff from raw_declaration.
exported_highcode_variables: List( tmp::Codetemp ),
export_picklehash: Null_Or( Picklehash ),
symbolmapstack_picklehash: Hash,
pickle: Pickle
};
# Typecheck as above, then additionally compile down to binary code:
#
translate_raw_syntax_to_execode
:
{ sourcecode_info: sci::Sourcecode_Info,
raw_declaration: raw::Declaration, # Actual raw syntax to compile.
symbolmapstack: syx::Symbolmapstack, # Symbol table containing info from all .compiled files we depend on.
inlining_mapstack: im::Picklehash_To_Anormcode_Mapstack, # Inlining table matching symbolmapstack.
per_compile_stuff: pcs::Per_Compile_Stuff( ds::Declaration ),
compiledfile_version: Compiledfile_Version,
handle_compile_errors: String -> Void,
crossmodule_inlining_aggressiveness: Null_Or( Int )
}
->
{ code_and_data_segments: cs::Code_And_Data_Segments,
new_symbolmapstack: syx::Symbolmapstack, # A symbol table delta containing (only) stuff from raw_declaration.
deep_syntax_declaration: ds::Declaration, # Typechecked form of raw_declaration -- only for prettyprinting.
export_picklehash: Null_Or( Picklehash ),
exported_highcode_variables: List( tmp::Codetemp ),
symbolmapstack_picklehash: Hash,
pickle: Pickle,
inline_expression: Null_Or( acf::Function ),
import_trees: List( imp::Import_Tree )
};
}; # Api Translate_Raw_Syntax_To_Execode_0
end;
api Translate_Raw_Syntax_To_Execode
=
Translate_Raw_Syntax_To_Execode_0
where Pickle == vector_of_one_byte_unts::Vector
also Hash == picklehash::Picklehash
also Compiledfile_Version == String;
api Toplevel_Translate_Raw_Syntax_To_Execode
=
Translate_Raw_Syntax_To_Execode_0
where Hash == Void
also Compiledfile_Version == Void;
## COPYRIGHT (c) 1996 Bell Laboratories
## Subsequent changes by Jeff Prothero Copyright (c) 2010-2015,
## released per terms of SMLNJ-COPYRIGHT.