|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
Compiler represents the current state of a compiler and all appropriate transitions and modifications that can be made within it. The methods here begin and end a class for a given compile run, begin and end methods for the script being compiled, set line number information, and generate code for all the basic operations necessary for a script to run. The intent of this interface is to provide a library-neutral set of functions for compiling a given script using any backend or any output format.
Method Summary | |
void |
assignClassVariable(java.lang.String name)
|
void |
assignConstantInCurrent(java.lang.String name)
|
void |
assignConstantInModule(java.lang.String name)
|
void |
assignConstantInObject(java.lang.String name)
|
void |
assignGlobalVariable(java.lang.String name)
Assign the top of the stack to the global variable with the specified name. |
void |
assignGlobalVariableBlockArg(int index,
java.lang.String name)
Assign the value from incoming block args to the global variable with the specified name. |
void |
assignInstanceVariable(java.lang.String name)
Assign the value on top of the stack to the instance variable with the specified name on the current "self". |
void |
assignInstanceVariableBlockArg(int index,
java.lang.String name)
Assign the value from incoming block args instance variable with the specified name on the current "self". |
void |
assignLastLine()
Assigns the special "last line" variable $_ in the outermost local scope. |
void |
assignLocalVariable(int index)
Assigns the value on top of the stack to a local variable at the specified index, consuming that value in the process. |
void |
assignLocalVariable(int index,
int depth)
Assign the value on top of the stack to a local variable at the specified index and lexical scoping depth (0 = current scope), consuming that value in the process. |
void |
assignLocalVariableBlockArg(int argIndex,
int varIndex)
Assigns the value from incoming block args to a local variable at the specified index, consuming that value in the process. |
void |
assignLocalVariableBlockArg(int argIndex,
int varIndex,
int depth)
Assign the value from incoming block args to a local variable at the specified index and lexical scoping depth (0 = current scope), consuming that value in the process. |
void |
assignOptionalArgs(java.lang.Object object,
int expectedArgsCount,
int size,
ArrayCallback optEval)
|
void |
asString()
|
java.lang.Object |
beginMethod(java.lang.String friendlyName,
ClosureCallback argsHandler)
Begin compilation for a method that has the specified number of local variables. |
void |
consumeCurrentValue()
As code executes, values are assumed to be "generated", often by being pushed on to some execution stack. |
void |
createEmptyArray()
Create an empty Ruby array |
void |
createEmptyHash()
Create an empty Ruby Hash object and put a reference on top of the stack. |
void |
createNewArray()
Given an aggregated set of objects (likely created through a call to createObjectArray) create a Ruby array object. |
void |
createNewBignum(java.math.BigInteger value)
Generate a new "Bignum" value. |
void |
createNewClosure(StaticScope scope,
int arity,
ClosureCallback body,
ClosureCallback args)
Create a new closure (block) using the given lexical scope information, call arity, and body generated by the body callback. |
void |
createNewFixnum(long value)
Generate a new "Fixnum" value. |
void |
createNewFloat(double value)
Generate a new "Float" value. |
void |
createNewHash(java.lang.Object elements,
ArrayCallback callback,
int keyCount)
Create a new hash by calling back to the specified ArrayCallback. |
void |
createNewRange(boolean isExclusive)
Create a new range. |
void |
createNewRegexp(ByteList value,
int options,
java.lang.String lang)
|
void |
createNewString(ArrayCallback callback,
int count)
Generate a new dynamic "String" value. |
void |
createNewString(ByteList value)
Generate a new "String" value. |
void |
createNewSymbol(java.lang.String name)
Generate a new "Symbol" value (or fetch the existing one). |
void |
createObjectArray(int elementCount)
Combine the top |
void |
createObjectArray(java.lang.Object[] elementArray,
ArrayCallback callback)
|
void |
defineAlias(java.lang.String newName,
java.lang.String oldName)
Define an alias for a new name to an existing oldName'd method. |
void |
defineClass(java.lang.String name,
StaticScope staticScope,
ClosureCallback superCallback,
ClosureCallback pathCallback,
ClosureCallback bodyCallback)
|
void |
defineModule(java.lang.String name,
StaticScope staticScope,
ClosureCallback pathCallback,
ClosureCallback bodyCallback)
|
void |
defineNewMethod(java.lang.String name,
StaticScope scope,
ClosureCallback body,
ClosureCallback args)
Define a new method with the given name, arity, local variable count, and body callback. |
void |
duplicateCurrentValue()
Push a copy the topmost value on the stack. |
void |
endMethod(java.lang.Object token)
End compilation for the method associated with the specified token. |
void |
endScript()
End compilation for the current script, closing all context and structures used for the compilation. |
void |
ensureRubyArray()
Ensures that the present value is an IRubyObject[] by wrapping it with one if it is not. |
void |
forEachInValueArray(int count,
int start,
java.lang.Object source,
ArrayCallback callback)
Given an IRubyObject[] on the stack (or otherwise available as the present object) call back to the provided ArrayCallback 'callback' for 'count' elements, starting with 'start'. |
void |
invokeAttrAssign(java.lang.String name)
Attr assign calls have slightly different semantics that normal calls, so this method handles those additional semantics. |
void |
invokeDynamic(java.lang.String name,
boolean hasReceiver,
boolean hasArgs,
CallType callType,
ClosureCallback closureArg,
boolean attrAssign)
Invoke the named method as a "function", i.e. |
void |
issueBreakEvent()
|
void |
lineNumber(ISourcePosition position)
This method provides a way to specify a line number for the current piece of code being compiled. |
void |
loadFalse()
Load a Ruby "false" value on top of the stack. |
void |
loadInteger(int value)
Load an integer value suitable for numeric comparisons |
void |
loadNil()
Load a Ruby "nil" value on top of the stack. |
void |
loadObject()
Load the Object class |
void |
loadRubyArraySize()
|
void |
loadSymbol(java.lang.String symbol)
Load the given string as a symbol on to the top of the stack. |
void |
loadTrue()
Load a Ruby "true" value on top of the stack. |
void |
match()
|
void |
match2()
|
void |
match3()
|
void |
negateCurrentValue()
Perform a logical Ruby "not" operation on the value on top of the stack, leaving the negated result. |
void |
nthRef(int match)
|
void |
performBooleanBranch(BranchCallback trueBranch,
BranchCallback falseBranch)
Perform a boolean branch operation based on the Ruby "true" value of the top value on the stack. |
void |
performBooleanLoop(BranchCallback condition,
BranchCallback body,
boolean checkFirst)
Perform a boolean loop using the given condition-calculating branch and body branch. |
void |
performGEBranch(BranchCallback trueBranch,
BranchCallback falseBranch)
Perform a greater-than-or-equal test and branch, given the provided true and false branches. |
void |
performGTBranch(BranchCallback trueBranch,
BranchCallback falseBranch)
Perform a greater-than test and branch, given the provided true and false branches. |
void |
performLEBranch(BranchCallback trueBranch,
BranchCallback falseBranch)
Perform a greater-than-or-equal test and branch, given the provided true and false branches. |
void |
performLogicalAnd(BranchCallback longBranch)
Perform a logical short-circuited Ruby "and" operation, using Ruby notions of true and false. |
void |
performLogicalOr(BranchCallback longBranch)
Perform a logical short-circuited Ruby "or" operation, using Ruby notions of true and false. |
void |
performLTBranch(BranchCallback trueBranch,
BranchCallback falseBranch)
Perform a greater-than test and branch, given the provided true and false branches. |
void |
performReturn()
Return the current value on the top of the stack, taking into consideration surrounding blocks. |
void |
pollThreadEvents()
|
void |
processRequiredArgs(Arity arity,
int totalArgs)
|
void |
retrieveBackRef()
Retrieve the special "back ref" variable $~ from the outermost local scope. |
void |
retrieveClassVariable(java.lang.String name)
|
void |
retrieveConstant(java.lang.String name)
Retrieve the constant with the specified name available at the current point in the program's execution. |
void |
retrieveGlobalVariable(java.lang.String name)
Retrieve the global variable with the specified name to the top of the stack. |
void |
retrieveInstanceVariable(java.lang.String name)
Retrieve the instance variable with the given name, based on the current "self". |
void |
retrieveLastLine()
Retrieve the special "last line" variable $_ from the outermost local scope. |
void |
retrieveLocalVariable(int index)
Retrieve the local variable at the specified index to the top of the stack, using whatever local variable store is appropriate. |
void |
retrieveLocalVariable(int index,
int depth)
Retrieve the local variable as the specified index and lexical scoping depth to the top of the stack, using whatever local variable store is appropriate. |
void |
retrieveSelf()
Retrieve the current "self" and put a reference on top of the stack. |
void |
retrieveSelfClass()
Retrieve the current "self" object's metaclass and put a reference on top of the stack |
void |
singlifySplattedValue()
Given a splatted value, extract a single value. |
void |
splatCurrentValue()
Convert the current value into a "splatted value" suitable for passing as method arguments or disassembling into multiple variables. |
void |
startScript()
Begin compilation for a script, preparing all necessary context and code to support this script's compiled representation. |
void |
swapValues()
Swap the top and second values on the stack. |
void |
yield(boolean hasArgs)
Invoke the block passed into this method, or throw an error if no block is present. |
Method Detail |
public void startScript()
public void endScript()
public java.lang.Object beginMethod(java.lang.String friendlyName, ClosureCallback argsHandler)
friendlyName
- The outward user-readable name of the method. A unique name will be generated based on this.
public void endMethod(java.lang.Object token)
token
- A token identifying the method to be terminated.public void consumeCurrentValue()
public void duplicateCurrentValue()
public void swapValues()
public void lineNumber(ISourcePosition position)
position
- The ISourcePosition information to use.public void invokeDynamic(java.lang.String name, boolean hasReceiver, boolean hasArgs, CallType callType, ClosureCallback closureArg, boolean attrAssign)
public void invokeAttrAssign(java.lang.String name)
public void yield(boolean hasArgs)
public void assignLocalVariable(int index)
index
- The index of the local variable to which to assign the value.public void assignLastLine()
public void assignLocalVariableBlockArg(int argIndex, int varIndex)
public void retrieveLocalVariable(int index)
index
- The index of the local variable to retrievepublic void retrieveLastLine()
public void retrieveBackRef()
public void assignLocalVariable(int index, int depth)
index
- The index in which to store the local variabledepth
- The lexical scoping depth in which to store the variablepublic void assignLocalVariableBlockArg(int argIndex, int varIndex, int depth)
depth
- The lexical scoping depth in which to store the variablepublic void retrieveLocalVariable(int index, int depth)
index
- The index of the local variable to retrievedepth
- The lexical scoping depth from which to retrieve the variablepublic void assignOptionalArgs(java.lang.Object object, int expectedArgsCount, int size, ArrayCallback optEval)
public void retrieveSelf()
public void retrieveSelfClass()
public void retrieveClassVariable(java.lang.String name)
public void assignClassVariable(java.lang.String name)
public void createNewFixnum(long value)
public void createNewFloat(double value)
public void createNewBignum(java.math.BigInteger value)
public void createNewString(ByteList value)
public void createNewString(ArrayCallback callback, int count)
public void createNewSymbol(java.lang.String name)
public void createObjectArray(java.lang.Object[] elementArray, ArrayCallback callback)
public void createObjectArray(int elementCount)
elementCountelements into a single element, generally an array or similar construct. The specified number of elements are consumed and an aggregate element remains.
elementCount
- The number of elements to consumepublic void createNewArray()
public void createEmptyArray()
public void createEmptyHash()
public void createNewHash(java.lang.Object elements, ArrayCallback callback, int keyCount)
elements
- An object holding the elements from which to create the Hash.callback
- An ArrayCallback implementation to which the elements array and iteration counts
are passed in sequence.keyCount
- the total count of key-value pairs to be constructed from the elements collection.public void createNewRange(boolean isExclusive)
isExclusive
- Whether the range is exclusive or not (inclusive)public void performBooleanBranch(BranchCallback trueBranch, BranchCallback falseBranch)
trueBranch
- The callback for generating code for the "true" conditionfalseBranch
- The callback for generating code for the "false" conditionpublic void performLogicalAnd(BranchCallback longBranch)
longBranch
- The branch to execute if the "and" operation does not short-circuit.public void performLogicalOr(BranchCallback longBranch)
longBranch
- The branch to execute if the "or" operation does not short-circuit.public void performBooleanLoop(BranchCallback condition, BranchCallback body, boolean checkFirst)
condition
- The code to execute for calculating the loop condition. A Ruby true result will
cause the body to be executed again.body
- The body to executed for the loop.checkFirst
- whether to check the condition the first time through or not.public void performReturn()
public void createNewClosure(StaticScope scope, int arity, ClosureCallback body, ClosureCallback args)
scope
- The static scoping informationarity
- The arity of the block's argument listbody
- The callback which will generate the closure's bodypublic void defineNewMethod(java.lang.String name, StaticScope scope, ClosureCallback body, ClosureCallback args)
name
- The name to which to bind the resulting method.body
- The callback which will generate the method's body.public void processRequiredArgs(Arity arity, int totalArgs)
public void defineAlias(java.lang.String newName, java.lang.String oldName)
newName
- The new alias to createoldName
- The name of the existing method or aliaspublic void assignConstantInCurrent(java.lang.String name)
public void assignConstantInModule(java.lang.String name)
public void assignConstantInObject(java.lang.String name)
public void retrieveConstant(java.lang.String name)
name
- The name of the constantpublic void loadFalse()
public void loadTrue()
public void loadNil()
public void loadSymbol(java.lang.String symbol)
symbol
- The symbol to load.public void loadObject()
public void retrieveInstanceVariable(java.lang.String name)
name
- The name of the instance variable to retrieve.public void assignInstanceVariable(java.lang.String name)
name
- The name of the value to assign.public void assignInstanceVariableBlockArg(int index, java.lang.String name)
index
- The index in the incoming arguments from which to get the ivar valuename
- The name of the ivar to assign.public void assignGlobalVariable(java.lang.String name)
name
- The name of the global variable.public void assignGlobalVariableBlockArg(int index, java.lang.String name)
index
- The index in the incoming arguments from which to get the gvar valuename
- The name of the global variable.public void retrieveGlobalVariable(java.lang.String name)
name
- The name of the global variable.public void negateCurrentValue()
public void splatCurrentValue()
public void singlifySplattedValue()
public void forEachInValueArray(int count, int start, java.lang.Object source, ArrayCallback callback)
public void ensureRubyArray()
public void loadInteger(int value)
public void performGEBranch(BranchCallback trueBranch, BranchCallback falseBranch)
public void performGTBranch(BranchCallback trueBranch, BranchCallback falseBranch)
public void performLEBranch(BranchCallback trueBranch, BranchCallback falseBranch)
public void performLTBranch(BranchCallback trueBranch, BranchCallback falseBranch)
public void loadRubyArraySize()
public void issueBreakEvent()
public void asString()
public void nthRef(int match)
public void match()
public void match2()
public void match3()
public void createNewRegexp(ByteList value, int options, java.lang.String lang)
public void defineClass(java.lang.String name, StaticScope staticScope, ClosureCallback superCallback, ClosureCallback pathCallback, ClosureCallback bodyCallback)
public void defineModule(java.lang.String name, StaticScope staticScope, ClosureCallback pathCallback, ClosureCallback bodyCallback)
public void pollThreadEvents()
|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |