Merge branch 'master' of git://factorcode.org/git/factor
commit
60cfa8c72b
|
@ -8,7 +8,8 @@ $nl
|
||||||
"The main entry point to the optimizing compiler:"
|
"The main entry point to the optimizing compiler:"
|
||||||
{ $subsection optimized-recompile-hook }
|
{ $subsection optimized-recompile-hook }
|
||||||
"Removing a word's optimized definition:"
|
"Removing a word's optimized definition:"
|
||||||
{ $subsection decompile } ;
|
{ $subsection decompile }
|
||||||
|
"These words are not usually used directly. Instead, use " { $link "compilation-units" } "." ;
|
||||||
|
|
||||||
ARTICLE: "compiler" "Optimizing compiler"
|
ARTICLE: "compiler" "Optimizing compiler"
|
||||||
"Factor is a fully compiled language implementation with two distinct compilers:"
|
"Factor is a fully compiled language implementation with two distinct compilers:"
|
||||||
|
|
|
@ -9,7 +9,9 @@ $nl
|
||||||
$nl
|
$nl
|
||||||
"The parser groups all definitions in a source file into one compilation unit, and parsing words do not need to concern themselves with compilation units. However, if definitions are being created at run time, a compilation unit must be created explicitly:"
|
"The parser groups all definitions in a source file into one compilation unit, and parsing words do not need to concern themselves with compilation units. However, if definitions are being created at run time, a compilation unit must be created explicitly:"
|
||||||
{ $subsection with-compilation-unit }
|
{ $subsection with-compilation-unit }
|
||||||
"Words called to associate a definition with a source file location:"
|
"Compiling a set of words:"
|
||||||
|
{ $subsection compile }
|
||||||
|
"Words called to associate a definition with a compilation unit and a source file location:"
|
||||||
{ $subsection remember-definition }
|
{ $subsection remember-definition }
|
||||||
{ $subsection remember-class }
|
{ $subsection remember-class }
|
||||||
"Forward reference checking (see " { $link "definition-checking" } "):"
|
"Forward reference checking (see " { $link "definition-checking" } "):"
|
||||||
|
|
|
@ -227,6 +227,9 @@ HELP: foldable
|
||||||
}
|
}
|
||||||
"The last restriction ensures that words such as " { $link clone } " do not satisfy the foldable word contract. Indeed, " { $link clone } " will output a mutable object if its input is mutable, and so it is undesirable to evaluate it at compile-time, since doing so would give incorrect semantics for code that clones mutable objects and proceeds to mutate them."
|
"The last restriction ensures that words such as " { $link clone } " do not satisfy the foldable word contract. Indeed, " { $link clone } " will output a mutable object if its input is mutable, and so it is undesirable to evaluate it at compile-time, since doing so would give incorrect semantics for code that clones mutable objects and proceeds to mutate them."
|
||||||
}
|
}
|
||||||
|
{ $notes
|
||||||
|
"Folding optimizations are not applied if the call site of a word is in the same source file as the word. This is a side-effect of the compilation unit system; see " { $link "compilation-units" } "."
|
||||||
|
}
|
||||||
{ $examples "Most operations on numbers are foldable. For example, " { $snippet "2 2 +" } " compiles to a literal 4, since " { $link + } " is declared foldable." } ;
|
{ $examples "Most operations on numbers are foldable. For example, " { $snippet "2 2 +" } " compiles to a literal 4, since " { $link + } " is declared foldable." } ;
|
||||||
|
|
||||||
HELP: flushable
|
HELP: flushable
|
||||||
|
|
|
@ -3,9 +3,15 @@
|
||||||
if [ \( `uname -s ` = FreeBSD \) -a \( `uname -p` = i386 \) ]
|
if [ \( `uname -s ` = FreeBSD \) -a \( `uname -p` = i386 \) ]
|
||||||
then
|
then
|
||||||
echo freebsd-x86-32
|
echo freebsd-x86-32
|
||||||
|
elif [ \( `uname -s` = FreeBSD \) -a \( `uname -m` = amd64 \) ]
|
||||||
|
then
|
||||||
|
echo freebsd-x86-64
|
||||||
elif [ \( `uname -s` = OpenBSD \) -a \( `uname -m` = i386 \) ]
|
elif [ \( `uname -s` = OpenBSD \) -a \( `uname -m` = i386 \) ]
|
||||||
then
|
then
|
||||||
echo openbsd-x86-32
|
echo openbsd-x86-32
|
||||||
|
elif [ \( `uname -s` = OpenBSD \) -a \( `uname -m` = amd64 \) ]
|
||||||
|
then
|
||||||
|
echo openbsd-x86-64
|
||||||
elif [ \( `uname -s` = Darwin \) -a \( `uname -p` = powerpc \) ]
|
elif [ \( `uname -s` = Darwin \) -a \( `uname -p` = powerpc \) ]
|
||||||
then
|
then
|
||||||
echo macosx-ppc
|
echo macosx-ppc
|
||||||
|
|
|
@ -1,7 +1,10 @@
|
||||||
|
#include <amd64/signal.h>
|
||||||
|
|
||||||
INLINE void *openbsd_stack_pointer(void *uap)
|
INLINE void *openbsd_stack_pointer(void *uap)
|
||||||
{
|
{
|
||||||
ucontext_t *ucontext = (ucontext_t *)uap;
|
struct sigcontext *sc = (struct sigcontext*) uap;
|
||||||
return (void *)ucontext->sc_rsp;
|
return (void *)sc->sc_rsp;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define ucontext_stack_pointer openbsd_stack_pointer
|
#define ucontext_stack_pointer openbsd_stack_pointer
|
||||||
|
#define UAP_PROGRAM_COUNTER(uap) (((struct sigcontext*)(uap))->sc_rip)
|
||||||
|
|
Loading…
Reference in New Issue