public class Translator extends Compilation
Modifier and Type | Class and Description |
---|---|
static class |
Translator.FormStack
A list of "forms" to be further processed.
|
static class |
Translator.ScanContext |
static class |
Translator.ValuesFromLList
An implementationof Values using a linked list.
|
SourceLocator.Simple
Modifier and Type | Field and Description |
---|---|
LambdaExp |
curMethodLambda |
Macro |
currentMacroDefinition
Set if we're processing (as opposed to expanding)
a
define-syntax or defmacro . |
Translator.FormStack |
formStack |
static Declaration |
getNamedPartDecl |
Declaration |
matchArray
A variable to hold the matched values for syntax-case
pattern variables.
|
PatternScope |
patternScope
Innermost current scope of pattern variable,
from a
syntax-case . |
java.lang.Object |
pendingForm |
Declaration |
templateScopeDecl |
NamespaceBinding |
xmlElementNamespaces |
apply0args, apply0method, apply1args, apply1method, apply2args, apply2method, apply3method, apply4method, applyCpsMethod, applymethods, applyNargs, applyNmethod, argsCallContextField, BODY_PARSED, CALL_WITH_CONSUMER, CALL_WITH_CONTINUATIONS, CALL_WITH_RETURN, CALL_WITH_TAILCALLS, CALL_WITH_UNSPECIFIED, CLASS_WRITTEN, classPrefix, classPrefixDefault, COMPILE_SETUP, COMPILED, curClass, curLambda, current_scope, currentOptions, debugPrintANF, debugPrintExpr, debugPrintFinalExpr, defaultCallConvention, defaultClassFileVersion, emitSourceDebugExtAttr, enableANF, ERROR_SEEN, explicit, exprStack, falseConstant, fullTailCallsVariable, getCallContextInstanceMethod, getCurrentEnvironmentMethod, getNextArgMethod, immediate, inlineOk, int1Args, javaStringType, language, lexer, lexical, mainClass, mainLambda, mainMethodVariable, maxErrors, messages, method, MODULE_NONSTATIC, MODULE_STATIC, MODULE_STATIC_DEFAULT, MODULE_STATIC_RUN, moduleClass, moduleStatic, mustCompile, noArgsField, objArrayType, options, pcCallContextField, pendingImports, PRE_WALKED, procCallContextField, PROLOG_PARSED, PROLOG_PARSING, RESOLVED, scmBooleanType, scmKeywordType, scmListType, scmSequenceType, string1Arg, subModuleMap, sym1Arg, thisDecl, trueConstant, typeApplet, typeCallContext, typeCharSequence, typeClass, typeClassType, typeCompiledProc, typeConsumer, typeEnvironment, typeFieldLocation, typeLanguage, typeList, typeLocation, typeLocationProc, typeMethodProc, typeModuleBody, typeObject, typeObjectType, typePair, typeProcedure, typeProcedure0, typeProcedure1, typeProcedure2, typeProcedure3, typeProcedure4, typeProcedureArray, typeProcedureN, typeRunnable, typeRunnableModule, typeServlet, typeStaticFieldLocation, typeString, typeSymbol, typeType, typeValues, voidConsumerInstanceField, WALKED, warnAsError, warnInvokeUnknownMethod, warnUndefinedVariable, warnUninitialized, warnUnknownMember, warnUnreachable, warnUnused, warnVoidUsed, writeImplicitClasses
Constructor and Description |
---|
Translator(Language language,
SourceMessages messages,
NameLookup lexical) |
Translator(Language language,
SourceMessages messages,
NameLookup lexical,
Environment env) |
Modifier and Type | Method and Description |
---|---|
boolean |
appendBodyValues() |
Expression |
checkDefaultBinding(Symbol symbol,
Translator tr)
If a symbol is lexically unbound, look for a default binding.
|
int |
curScanNesting() |
Declaration |
define(java.lang.Object name,
ScopeExp defs) |
Declaration |
define(java.lang.Object name,
SyntaxForm nameSyntax,
ScopeExp defs) |
Declaration |
define(java.lang.Object name,
TemplateScope templateScope,
ScopeExp defs) |
void |
errorIfNonEmpty(java.lang.Object form) |
void |
errorWithPosition(java.lang.String message,
java.lang.Object form) |
Type |
exp2Type(Pair typeSpecPair)
Extract a type from the car of a pair.
|
Type |
exp2Type(Pair typeSpecPair,
Declaration decl,
SyntaxForm syntax) |
void |
finishModule(ModuleExp mexp) |
int |
getCompletions(Environment env,
java.lang.String nameStart,
java.lang.Object property,
java.lang.String namespaceUri,
java.util.List<? super java.lang.String> matches) |
Syntax |
getCurrentSyntax() |
Environment |
getGlobalEnvironment() |
Translator.ScanContext |
getScanContext() |
java.util.Stack<Translator.ScanContext> |
getScanContextStack() |
boolean |
keywordsAreSelfEvaluating() |
static int |
listLength(java.lang.Object obj)
Returns the length of a syntax list.
|
Declaration |
lookup(java.lang.Object name,
int namespace) |
Declaration |
lookupGlobal(java.lang.Object name)
Find global Declaration, creating one if not found.
|
Declaration |
lookupGlobal(java.lang.Object name,
int namespace)
Find global Declaration, creating one if not found.
|
static java.lang.String |
lookupStandardEntity(java.lang.String key) |
Expression |
makeBody(Expression[] exps)
Combine a 'body' consisting of a list of expression.
|
protected Expression |
makeBody(Pair head,
ScopeExp scope)
Combine a list of zero or more expression forms into a "body".
|
static Pair |
makePair(Pair pair,
java.lang.Object car,
java.lang.Object cdr) |
Declaration |
makeRenamedAlias(Declaration decl,
ScopeExp templateScope) |
Declaration |
makeRenamedAlias(java.lang.Object name,
Declaration decl,
ScopeExp templateScope) |
boolean |
matches(java.lang.Object form,
java.lang.String literal)
True iff a form matches a literal symbol.
|
boolean |
matches(java.lang.Object form,
SyntaxForm syntax,
java.lang.String literal) |
boolean |
matches(java.lang.Object form,
SyntaxForm syntax,
Symbol literal) |
java.lang.Object |
matchQuoted(Pair pair) |
Symbol |
namespaceResolve(Expression context,
Expression member) |
Symbol |
namespaceResolve(Namespace ns,
Expression member) |
java.lang.Object |
namespaceResolve(java.lang.Object name) |
Namespace |
namespaceResolvePrefix(Expression context) |
void |
noteAccess(java.lang.Object name,
ScopeExp scope)
Note that we reference name in a given scope.
|
Expression |
parse(java.lang.Object input)
This may not make sense, except for Lisp-like languages.
|
Values |
popForms(Pair beforeFirst)
Pop from formStack all forms that come after beforeFirst.
|
void |
popPositionOf(java.lang.Object saved)
Restore line number position from a previous pushPositionOf.
|
void |
popRenamedAlias(int count)
Remove one or more aliases created by
pushRenamedAlias . |
void |
popScanContext() |
void |
processAccesses()
Check references recorded by noteAccess.
|
void |
pushForm(java.lang.Object value) |
java.lang.Object |
pushPositionOf(java.lang.Object pos)
Note current line number position from a PairWithPosition.
|
void |
pushRenamedAlias(Declaration alias)
Push an alias for a declaration in a scope.
|
void |
pushScanContext(LambdaExp lambda) |
int |
renamedAliasCount() |
void |
resolveModule(ModuleExp mexp) |
Expression |
rewrite_body(java.lang.Object exp)
Re-write a Scheme 'body' in S-expression format into internal form.
|
Expression |
rewrite_car_for_lookup(Pair pair)
Similar to rewrite_car.
|
Expression |
rewrite_car(Pair pair,
boolean function) |
Expression |
rewrite_car(Pair pair,
ScopeExp templateScope) |
Expression |
rewrite_car(Pair pair,
SyntaxForm syntax) |
Expression |
rewrite_lookup(Expression part1,
Expression part2,
boolean function) |
Expression |
rewrite_pair(Pair p,
boolean function) |
Expression |
rewrite_with_position(java.lang.Object exp,
boolean function,
PairWithPosition pair) |
Expression |
rewrite(java.lang.Object exp)
Re-write a Scheme expression in S-expression format into internal form.
|
Expression |
rewrite(java.lang.Object exp,
boolean function)
Re-write a Scheme expression in S-expression format into internal form.
|
Expression |
rewrite(java.lang.Object exp,
char mode)
Re-write a Scheme expression in S-expression format into internal form.
|
protected void |
rewriteBody(LList forms) |
void |
rewriteInBody(java.lang.Object exp) |
static java.lang.Object |
safeCar(java.lang.Object obj) |
static java.lang.Object |
safeCdr(java.lang.Object obj) |
LList |
scanBody(java.lang.Object body,
ScopeExp defs,
boolean makeList)
Recursive helper method for rewrite_body.
|
void |
scanForm(java.lang.Object st,
ScopeExp defs) |
boolean |
selfEvaluatingSymbol(java.lang.Object obj) |
static void |
setLine(Declaration decl,
java.lang.Object location) |
static void |
setLine(Expression exp,
java.lang.Object location) |
void |
setLineOf(Expression exp)
Set the line position of the argument to the current position.
|
static java.lang.Object |
stripSyntax(java.lang.Object obj) |
static java.lang.Object |
wrapSyntax(java.lang.Object form,
SyntaxForm syntax) |
addClass, addMainClass, allocLocalField, applyFunction, asBooleanValue, cleanupAfterCompilation, compileConstant, compileConstant, compileToArchive, currentCallConvention, currentLambda, currentModule, currentScope, emitCoerceToBoolean, emitPushBoolean, error, error, error, error, findForImmediateLiterals, findNamedClass, freeLocalField, generateCheckMethod, generateCheckMethods, generateClassName, generateConstructor, generateConstructor, generateMainMethod, generatingApplet, generatingServlet, getBooleanOption, getBooleanOption, getCode, getColumnNumber, getConstructor, getConstructor, getCurrent, getEndColumn, getEndLine, getFileName, getForNameHelper, getLanguage, getLineNumber, getMessages, getMinfo, getModule, getModuleType, getPublicId, getSourceAbsPath, getStartColumn, getStartLine, getState, getSystemId, inlineOk, inlineOk, isApplyFunction, isInteractive, isPedantic, isSimpleApplyFunction, isStableSourceLocation, isStatic, letDone, letEnter, letStart, letVariable, letVariable, loadCallContext, loadClassRef, loopBody, loopCond, loopDone, loopEnter, loopRepeat, loopRepeatDone, loopStart, loopVariable, makeCoercion, makeCoercion, makeQuoteExp, makeRunnable, mangleURI, maxErrors, mustCompileHere, outputClass, pop, pop, process, push, push, pushNewModule, pushPendingImport, pushScope, registerForImmediateLiterals, resolve, restoreCurrent, setColumn, setCurrent, setCurrentScope, setEvalName, setFile, setInteractiveName, setLine, setLine, setLine, setLine, setLocation, setMessages, setModule, setModuleName, setPedantic, setPopCurrentScope, setPushCurrentScope, setSaveCurrent, setSharedModuleDefs, setState, setupLiterals, sharedModuleDefs, syntaxError, toString, usedClass, usingCallContext, usingCPStyle, usingTailCalls, warnAsError, warnInvokeUnknownMethod, warnUndefinedVariable, warnUninitialized, warnUnknownMember, warnUnreachable, warnUnused, warnVoidUsed
public Macro currentMacroDefinition
define-syntax
or defmacro
.public PatternScope patternScope
syntax-case
.public Declaration templateScopeDecl
public Declaration matchArray
public java.lang.Object pendingForm
public LambdaExp curMethodLambda
public NamespaceBinding xmlElementNamespaces
public static final Declaration getNamedPartDecl
public Translator.FormStack formStack
public Translator(Language language, SourceMessages messages, NameLookup lexical, Environment env)
public Translator(Language language, SourceMessages messages, NameLookup lexical)
public final Environment getGlobalEnvironment()
getGlobalEnvironment
in class Compilation
public Expression parse(java.lang.Object input)
Compilation
parse
in class Compilation
public final Expression rewrite_car(Pair pair, SyntaxForm syntax)
public final Expression rewrite_car(Pair pair, ScopeExp templateScope)
public final Expression rewrite_car(Pair pair, boolean function)
public final Expression rewrite_car_for_lookup(Pair pair)
public Syntax getCurrentSyntax()
public final boolean keywordsAreSelfEvaluating()
public final boolean selfEvaluatingSymbol(java.lang.Object obj)
public final boolean matches(java.lang.Object form, java.lang.String literal)
public boolean matches(java.lang.Object form, SyntaxForm syntax, java.lang.String literal)
public boolean matches(java.lang.Object form, SyntaxForm syntax, Symbol literal)
public java.lang.Object matchQuoted(Pair pair)
public Declaration lookup(java.lang.Object name, int namespace)
lookup
in class Compilation
public Declaration lookupGlobal(java.lang.Object name)
public Declaration lookupGlobal(java.lang.Object name, int namespace)
public Expression rewrite_pair(Pair p, boolean function)
public Expression rewrite_lookup(Expression part1, Expression part2, boolean function)
public Namespace namespaceResolvePrefix(Expression context)
public Symbol namespaceResolve(Namespace ns, Expression member)
public Symbol namespaceResolve(Expression context, Expression member)
public static java.lang.Object stripSyntax(java.lang.Object obj)
public static java.lang.Object safeCar(java.lang.Object obj)
public static java.lang.Object safeCdr(java.lang.Object obj)
public static int listLength(java.lang.Object obj)
public void rewriteInBody(java.lang.Object exp)
public int getCompletions(Environment env, java.lang.String nameStart, java.lang.Object property, java.lang.String namespaceUri, java.util.List<? super java.lang.String> matches)
public java.lang.Object namespaceResolve(java.lang.Object name)
public Expression rewrite(java.lang.Object exp)
public Expression rewrite(java.lang.Object exp, boolean function)
public Expression rewrite(java.lang.Object exp, char mode)
mode
- either 'N' (normal), 'F' (function application context),
'M' (macro-checking) or 'Q' (colon-form in quote).public Expression checkDefaultBinding(Symbol symbol, Translator tr)
<java.lang.Integer>
and java.lang.Integer
.
Also handles arrays, such as java.lang.String[]
.
If the symbol starts with '@'
parse as an annotation class.
Recognizes quanties with units, such as 2m
and 3m/s^2
.
Handles the xml and unit namespaces.public static java.lang.String lookupStandardEntity(java.lang.String key)
public static void setLine(Expression exp, java.lang.Object location)
public static void setLine(Declaration decl, java.lang.Object location)
public java.lang.Object pushPositionOf(java.lang.Object pos)
public void popPositionOf(java.lang.Object saved)
saved
- value returned by matching pushPositionOf.public void errorWithPosition(java.lang.String message, java.lang.Object form)
public void errorIfNonEmpty(java.lang.Object form)
public void setLineOf(Expression exp)
public Type exp2Type(Pair typeSpecPair, Declaration decl, SyntaxForm syntax)
public Expression rewrite_with_position(java.lang.Object exp, boolean function, PairWithPosition pair)
public static java.lang.Object wrapSyntax(java.lang.Object form, SyntaxForm syntax)
public Values popForms(Pair beforeFirst)
public void scanForm(java.lang.Object st, ScopeExp defs)
public LList scanBody(java.lang.Object body, ScopeExp defs, boolean makeList)
formStack
.makeList
- if true, return a list representation of the scanned
forms (not including declarations); else forms are push on formStackmakeList
(possibly wrapped
in a SyntaxForm
); otherwise null
.public Expression rewrite_body(java.lang.Object exp)
protected void rewriteBody(LList forms)
protected Expression makeBody(Pair head, ScopeExp scope)
public boolean appendBodyValues()
public Expression makeBody(Expression[] exps)
public void noteAccess(java.lang.Object name, ScopeExp scope)
public void processAccesses()
public void finishModule(ModuleExp mexp)
public void resolveModule(ModuleExp mexp)
public Declaration makeRenamedAlias(Declaration decl, ScopeExp templateScope)
public Declaration makeRenamedAlias(java.lang.Object name, Declaration decl, ScopeExp templateScope)
public void pushRenamedAlias(Declaration alias)
decl
came from a syntax template
whose immediate scope is templateScope
,
then the same syntax template may contain local variable references
that are also in the same templateScope
.
Such variable references will not look in the current
"physical" scope, where we just created decl
, but
will instead search the "lexical" templateScope
.
So that such references can resolve to decl
, we
create an alias in templateScope
that points
to decl
. We record that we did this in the
renamedAliasStack
, so we can remove the alias later.public int renamedAliasCount()
public void popRenamedAlias(int count)
pushRenamedAlias
.public Declaration define(java.lang.Object name, ScopeExp defs)
public Declaration define(java.lang.Object name, SyntaxForm nameSyntax, ScopeExp defs)
public Declaration define(java.lang.Object name, TemplateScope templateScope, ScopeExp defs)
public void pushForm(java.lang.Object value)
public Translator.ScanContext getScanContext()
public int curScanNesting()
public java.util.Stack<Translator.ScanContext> getScanContextStack()
public void pushScanContext(LambdaExp lambda)
public void popScanContext()