pnuts.compiler
Class Compiler

java.lang.Object
  extended by pnuts.lang.Runtime
      extended by pnuts.compiler.Compiler
All Implemented Interfaces:
Executable, Visitor

public class Compiler
extends Runtime
implements Visitor

Pnuts to JVM bytecode compiler


Nested Class Summary
static class Compiler.ClassGenerationResult
           
 
Nested classes/interfaces inherited from class pnuts.lang.Runtime
Runtime.Accessor, Runtime.Break, Runtime.Continue, Runtime.FunctionSerializer, Runtime.TypeMap
 
Field Summary
 
Fields inherited from class pnuts.lang.Runtime
BOOLEAN_SYMBOL, BYTE_SYMBOL, CHAR_SYMBOL, CLONE, DOUBLE_SYMBOL, EXCEPTOIN_FIELD_SYMBOL, fieldCache, FLOAT_SYMBOL, INT_SYMBOL, LONG_SYMBOL, SHORT_SYMBOL, VOID_SYMBOL
 
Constructor Summary
Compiler()
           
Compiler(java.lang.String className)
           
Compiler(java.lang.String className, boolean automatic)
           
Compiler(java.lang.String className, boolean automatic, boolean useDynamicProxy)
           
 
Method Summary
 java.lang.Object _listElements(SimpleNode node, Context context)
           
protected  java.lang.Object accept(SimpleNode node, int idx, Context context)
           
 java.lang.Object addNode(SimpleNode node, Context context)
           
 java.lang.Object andNode(SimpleNode node, Context context)
           
 java.lang.Object applicationNode(SimpleNode node, Context context)
           
 java.lang.Object arrayType(SimpleNode node, Context context)
           
 java.lang.Object assignment(SimpleNode node, Context context)
           
 java.lang.Object assignmentAA(SimpleNode node, Context context)
           
 java.lang.Object assignmentDA(SimpleNode node, Context context)
           
 java.lang.Object assignmentEA(SimpleNode node, Context context)
           
 java.lang.Object assignmentLA(SimpleNode node, Context context)
           
 java.lang.Object assignmentMA(SimpleNode node, Context context)
           
 java.lang.Object assignmentOA(SimpleNode node, Context context)
           
 java.lang.Object assignmentPA(SimpleNode node, Context context)
           
 java.lang.Object assignmentRA(SimpleNode node, Context context)
           
 java.lang.Object assignmentRAA(SimpleNode node, Context context)
           
 java.lang.Object assignmentSA(SimpleNode node, Context context)
           
 java.lang.Object assignmentTA(SimpleNode node, Context context)
           
static java.lang.Class attachClosure(java.lang.Class cls, PnutsFunction closure, Context context)
           
 java.lang.Object beanDef(SimpleNode node, Context context)
           
 java.lang.Object blockNode(SimpleNode node, Context context)
           
 java.lang.Object breakNode(SimpleNode node, Context context)
           
 java.lang.Object buildSubclassInstance(SimpleNode node, Context context)
           
static java.lang.Object buildSubclassInstance(java.lang.String encodedNode, Context context)
           
 java.lang.Object castExpression(SimpleNode node, Context context)
           
 java.lang.Object catchBlock(SimpleNode node, Context context)
           
 java.lang.Object catchNode(SimpleNode node, Context context)
           
 java.lang.Object characterNode(SimpleNode node, Context context)
           
 java.lang.Object classDef(SimpleNode node, Context context)
           
 java.lang.Object classDefBody(SimpleNode node, Context context)
           
 java.lang.Object className(SimpleNode node, Context context)
           
 java.lang.Object classNode(SimpleNode node, Context context)
           
 java.lang.Object classScript(SimpleNode node, Context context)
           
 java.lang.Object compile(Pnuts pnuts, ClassFileHandler handler)
          Compile a parsed expression.
 Pnuts compile(Pnuts pnuts, Context context)
          Compile a parsed expression.
 PnutsFunction compile(PnutsFunction pf)
          Compile a function group
 java.lang.Object compile(PnutsFunction pf, ClassFileHandler handler)
          Compile a function group.
 PnutsFunction compile(PnutsFunction pf, Context context)
          Compile a function group
 Pnuts compile(java.lang.String expression)
          Compile an expression.
 Pnuts compile(java.lang.String expression, Context context)
          Compile an expression.
 java.lang.Object compileClassScript(java.io.Reader reader, java.lang.Object scriptSource, ClassFileHandler handler)
           
 ClassFile compileClassScript(SimpleNode classScriptNode, java.lang.Object scriptSource, java.util.List helperClassFiles)
           
 java.lang.Object continueNode(SimpleNode node, Context context)
           
static pnuts.compiler.CodeLoader createCodeLoader(java.lang.ClassLoader loader)
           
 java.lang.Class defineClass(SimpleNode node, Context context)
           
 java.lang.Class defineClass(java.lang.String encodedNode, Context context)
           
 java.lang.Object divideNode(SimpleNode node, Context context)
           
 java.lang.Object doStatement(SimpleNode node, Context context)
           
 java.lang.Object equalNode(SimpleNode node, Context context)
           
protected  java.lang.Object execute(pnuts.compiler.CompileContext cc, Context context, boolean catchJump)
           
 java.lang.Object expressionList(SimpleNode node, Context context)
           
 java.lang.Object falseNode(SimpleNode node, Context context)
           
 java.lang.Object finallyNode(SimpleNode node, Context context)
           
 java.lang.Object floatingNode(SimpleNode node, Context context)
           
 java.lang.Object foreachStatement(SimpleNode node, Context context)
           
 java.lang.Object forStatement(SimpleNode node, Context context)
           
 java.lang.Object functionStatement(SimpleNode node, Context context)
           
 Compiler.ClassGenerationResult generateClass(SimpleNode node, Context context)
           
 java.lang.Object geNode(SimpleNode node, Context context)
           
static org.pnuts.lang.Signature getterSignature(java.lang.Class type, java.lang.String name)
           
 java.lang.Object global(SimpleNode node, Context context)
           
 java.lang.Object gtNode(SimpleNode node, Context context)
           
 java.lang.Object idNode(SimpleNode node, Context context)
           
 java.lang.Object ifStatement(SimpleNode node, Context context)
           
 java.lang.Object importNode(SimpleNode node, Context context)
           
 void includeColumnNo(boolean flag)
           
 void includeLineNo(boolean flag)
           
 void includeMainMethod(boolean flag)
           
 java.lang.Object indexNode(SimpleNode node, Context context)
           
 java.lang.Object instanceofExpression(SimpleNode node, Context context)
           
 java.lang.Object integerNode(SimpleNode node, Context context)
           
static boolean isCompiled(java.lang.Object obj)
          Check if an object is compiled
 java.lang.Object leNode(SimpleNode node, Context context)
           
 java.lang.Object listElements(SimpleNode node, Context context)
           
static java.lang.Class loadBytecode(java.lang.String name, java.lang.String encodedBytecode, PnutsFunction closure, Context context)
           
 java.lang.Object logAndNode(SimpleNode node, Context context)
           
 java.lang.Object logNotNode(SimpleNode node, Context context)
           
 java.lang.Object logOrNode(SimpleNode node, Context context)
           
 java.lang.Object ltNode(SimpleNode node, Context context)
           
 java.lang.Object mapNode(SimpleNode node, Context context)
           
 java.lang.Object memberNode(SimpleNode node, Context context)
           
 java.lang.Object methodDef(SimpleNode node, Context context)
           
 java.lang.Object methodNode(SimpleNode node, Context context)
           
 java.lang.Object modNode(SimpleNode node, Context context)
           
 java.lang.Object multNode(SimpleNode node, Context context)
           
 java.lang.Object negativeNode(SimpleNode node, Context context)
           
 java.lang.Object newNode(SimpleNode node, Context context)
           
 java.lang.Object notEqNode(SimpleNode node, Context context)
           
 java.lang.Object notNode(SimpleNode node, Context context)
           
 java.lang.Object nullNode(SimpleNode node, Context context)
           
 java.lang.Object orNode(SimpleNode node, Context context)
           
 java.lang.Object packageNode(SimpleNode node, Context context)
           
 java.lang.Object postDecrNode(SimpleNode node, Context context)
           
 java.lang.Object postIncrNode(SimpleNode node, Context context)
           
 java.lang.Object preDecrNode(SimpleNode node, Context context)
           
 java.lang.Object preIncrNode(SimpleNode node, Context context)
           
 java.lang.Object rangeNode(SimpleNode node, Context context)
           
 java.lang.Object returnNode(SimpleNode node, Context context)
           
 void setConstantFolding(boolean flag)
           
static org.pnuts.lang.Signature setterSignature(java.lang.Class type, java.lang.String name)
           
 void setTraceMode(boolean mode)
           
 java.lang.Object shiftArithmeticNode(SimpleNode node, Context context)
           
 java.lang.Object shiftLeftNode(SimpleNode node, Context context)
           
 java.lang.Object shiftRightNode(SimpleNode node, Context context)
           
 java.lang.Object start(SimpleNode node, Context context)
           
 java.lang.Object startSet(SimpleNode node, Context context)
           
 java.lang.Object staticMemberNode(SimpleNode node, Context context)
           
 java.lang.Object staticMethodNode(SimpleNode node, Context context)
           
 java.lang.Object stringNode(SimpleNode node, Context context)
           
 java.lang.Object subtractNode(SimpleNode node, Context context)
           
 java.lang.Object switchBlock(SimpleNode node, Context context)
           
 java.lang.Object switchStatement(SimpleNode node, Context context)
           
 java.lang.Object ternary(SimpleNode node, Context context)
           
 java.lang.Object throwNode(SimpleNode node, Context context)
           
 java.lang.Object trueNode(SimpleNode node, Context context)
           
 java.lang.Object tryStatement(SimpleNode node, Context context)
           
 void useDynamicProxy(boolean flag)
           
 java.lang.Object whileStatement(SimpleNode node, Context context)
           
 java.lang.Object xorNode(SimpleNode node, Context context)
           
 java.lang.Object yieldNode(SimpleNode node, Context context)
           
 
Methods inherited from class pnuts.lang.Runtime
_callConstructor, _callMethod, _getField, _putField, add, add, add1, add1, addImport, addStaticMembers, and, and, applyGenerator, arraydim, arrayType, call, call, callConstructor, callFunction, callMethod, cast, catchException, checkException, checkException, compareObjects, compareTo, compareTo, createCache, createList, createMap, createWeakMap, defineTopLevelFunction, defineUnboundFunction, divide, divide, eq, eq, escape, exec, execute, fileToURL, findCallableMethod, format, format, format, ge, ge, getArrayLength, getBeanProperty, getBeanProperty, getBeanProperty, getBeanPropertyType, getBeginColumn, getBeginLine, getBoolean, getBottomType, getCompiledScript, getConstructors, getDefaultRuntime, getElement, getElementAt, getEndLine, getField, getField, getFunction, getFunction, getFunctions, getMessage, getMethods, getProperty, getRange, getRuntime, getScriptReader, getScriptSource, getScriptURL, getStaticField, getThreadContext, gt, gt, isArray, isGenerator, jump, le, le, loadNode, lt, lt, makeArray, matchType, mod, mod, multiply, multiply, ne, ne, negate, negate, newInstance, not, not, or, or, parseChar, parseFloat, parseInt, parseString, primitive, printError, putField, putStaticField, quantity, replaceChar, run, saveNode, setBeanProperty, setBeanProperty, setBeanProperty, setElement, setExitHook, setLine, setLine, setPackage, setRange, setThreadContext, setupPropertyChangeListeners, shiftArithmetic, shiftArithmetic, shiftLeft, shiftLeft, shiftRight, shiftRight, subtract, subtract, subtract1, subtract1, throwException, toBoolean, toEnumeration, toFunctionNode, transform, transform, unparse, watchProperty, xor, xor
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Compiler

public Compiler()

Compiler

public Compiler(java.lang.String className)

Compiler

public Compiler(java.lang.String className,
                boolean automatic)

Compiler

public Compiler(java.lang.String className,
                boolean automatic,
                boolean useDynamicProxy)
Method Detail

includeLineNo

public void includeLineNo(boolean flag)

includeColumnNo

public void includeColumnNo(boolean flag)

setConstantFolding

public void setConstantFolding(boolean flag)

includeMainMethod

public void includeMainMethod(boolean flag)

setTraceMode

public void setTraceMode(boolean mode)

useDynamicProxy

public void useDynamicProxy(boolean flag)

execute

protected java.lang.Object execute(pnuts.compiler.CompileContext cc,
                                   Context context,
                                   boolean catchJump)

startSet

public java.lang.Object startSet(SimpleNode node,
                                 Context context)
Specified by:
startSet in interface Visitor

start

public java.lang.Object start(SimpleNode node,
                              Context context)
Specified by:
start in interface Visitor

expressionList

public java.lang.Object expressionList(SimpleNode node,
                                       Context context)
Specified by:
expressionList in interface Visitor

integerNode

public java.lang.Object integerNode(SimpleNode node,
                                    Context context)
Specified by:
integerNode in interface Visitor

floatingNode

public java.lang.Object floatingNode(SimpleNode node,
                                     Context context)
Specified by:
floatingNode in interface Visitor

stringNode

public java.lang.Object stringNode(SimpleNode node,
                                   Context context)
Specified by:
stringNode in interface Visitor

characterNode

public java.lang.Object characterNode(SimpleNode node,
                                      Context context)
Specified by:
characterNode in interface Visitor

classNode

public java.lang.Object classNode(SimpleNode node,
                                  Context context)
Specified by:
classNode in interface Visitor

newNode

public java.lang.Object newNode(SimpleNode node,
                                Context context)
Specified by:
newNode in interface Visitor

classDef

public java.lang.Object classDef(SimpleNode node,
                                 Context context)
Specified by:
classDef in interface Visitor

generateClass

public Compiler.ClassGenerationResult generateClass(SimpleNode node,
                                                    Context context)

attachClosure

public static java.lang.Class attachClosure(java.lang.Class cls,
                                            PnutsFunction closure,
                                            Context context)

loadBytecode

public static java.lang.Class loadBytecode(java.lang.String name,
                                           java.lang.String encodedBytecode,
                                           PnutsFunction closure,
                                           Context context)

buildSubclassInstance

public static java.lang.Object buildSubclassInstance(java.lang.String encodedNode,
                                                     Context context)

buildSubclassInstance

public java.lang.Object buildSubclassInstance(SimpleNode node,
                                              Context context)

defineClass

public java.lang.Class defineClass(java.lang.String encodedNode,
                                   Context context)

defineClass

public java.lang.Class defineClass(SimpleNode node,
                                   Context context)

methodDef

public java.lang.Object methodDef(SimpleNode node,
                                  Context context)
Specified by:
methodDef in interface Visitor

classDefBody

public java.lang.Object classDefBody(SimpleNode node,
                                     Context context)
Specified by:
classDefBody in interface Visitor

getterSignature

public static org.pnuts.lang.Signature getterSignature(java.lang.Class type,
                                                       java.lang.String name)

setterSignature

public static org.pnuts.lang.Signature setterSignature(java.lang.Class type,
                                                       java.lang.String name)

classScript

public java.lang.Object classScript(SimpleNode node,
                                    Context context)
Specified by:
classScript in interface Visitor

packageNode

public java.lang.Object packageNode(SimpleNode node,
                                    Context context)
Specified by:
packageNode in interface Visitor

importNode

public java.lang.Object importNode(SimpleNode node,
                                   Context context)
Specified by:
importNode in interface Visitor

logAndNode

public java.lang.Object logAndNode(SimpleNode node,
                                   Context context)
Specified by:
logAndNode in interface Visitor

logOrNode

public java.lang.Object logOrNode(SimpleNode node,
                                  Context context)
Specified by:
logOrNode in interface Visitor

logNotNode

public java.lang.Object logNotNode(SimpleNode node,
                                   Context context)
Specified by:
logNotNode in interface Visitor

shiftLeftNode

public java.lang.Object shiftLeftNode(SimpleNode node,
                                      Context context)
Specified by:
shiftLeftNode in interface Visitor

shiftRightNode

public java.lang.Object shiftRightNode(SimpleNode node,
                                       Context context)
Specified by:
shiftRightNode in interface Visitor

shiftArithmeticNode

public java.lang.Object shiftArithmeticNode(SimpleNode node,
                                            Context context)
Specified by:
shiftArithmeticNode in interface Visitor

addNode

public java.lang.Object addNode(SimpleNode node,
                                Context context)
Specified by:
addNode in interface Visitor

subtractNode

public java.lang.Object subtractNode(SimpleNode node,
                                     Context context)
Specified by:
subtractNode in interface Visitor

multNode

public java.lang.Object multNode(SimpleNode node,
                                 Context context)
Specified by:
multNode in interface Visitor

divideNode

public java.lang.Object divideNode(SimpleNode node,
                                   Context context)
Specified by:
divideNode in interface Visitor

modNode

public java.lang.Object modNode(SimpleNode node,
                                Context context)
Specified by:
modNode in interface Visitor

xorNode

public java.lang.Object xorNode(SimpleNode node,
                                Context context)
Specified by:
xorNode in interface Visitor

orNode

public java.lang.Object orNode(SimpleNode node,
                               Context context)
Specified by:
orNode in interface Visitor

andNode

public java.lang.Object andNode(SimpleNode node,
                                Context context)
Specified by:
andNode in interface Visitor

negativeNode

public java.lang.Object negativeNode(SimpleNode node,
                                     Context context)
Specified by:
negativeNode in interface Visitor

notNode

public java.lang.Object notNode(SimpleNode node,
                                Context context)
Specified by:
notNode in interface Visitor

ltNode

public java.lang.Object ltNode(SimpleNode node,
                               Context context)
Specified by:
ltNode in interface Visitor

leNode

public java.lang.Object leNode(SimpleNode node,
                               Context context)
Specified by:
leNode in interface Visitor

gtNode

public java.lang.Object gtNode(SimpleNode node,
                               Context context)
Specified by:
gtNode in interface Visitor

geNode

public java.lang.Object geNode(SimpleNode node,
                               Context context)
Specified by:
geNode in interface Visitor

equalNode

public java.lang.Object equalNode(SimpleNode node,
                                  Context context)
Specified by:
equalNode in interface Visitor

notEqNode

public java.lang.Object notEqNode(SimpleNode node,
                                  Context context)
Specified by:
notEqNode in interface Visitor

ifStatement

public java.lang.Object ifStatement(SimpleNode node,
                                    Context context)
Specified by:
ifStatement in interface Visitor

functionStatement

public java.lang.Object functionStatement(SimpleNode node,
                                          Context context)
Specified by:
functionStatement in interface Visitor

applicationNode

public java.lang.Object applicationNode(SimpleNode node,
                                        Context context)
Specified by: