зеркало из https://github.com/mozilla/gecko-dev.git
Sample driver for IR factory
This commit is contained in:
Родитель
6dc6cfcfa1
Коммит
e32e0eed70
|
@ -0,0 +1,87 @@
|
|||
|
||||
|
||||
class Brenda {
|
||||
|
||||
static FunctionNode tf;
|
||||
|
||||
public static void main(String cmdArgs[])
|
||||
{
|
||||
IRFactory irf = new IRFactory(null); // only need a tokenstream for errors
|
||||
|
||||
Object scriptBlock = irf.createLeaf(TokenStream.BLOCK); // will hold the global level stuff
|
||||
/*
|
||||
|
||||
this constructs a function 'TestFunction' containing 'foo = 0; throw a; return foo;'
|
||||
|
||||
*/
|
||||
Object funcBlock = irf.createLeaf(TokenStream.BLOCK);
|
||||
Object nameFoo1 = irf.createName("foo");
|
||||
Object zero = irf.createNumber(new Double(0));
|
||||
Object asgn1 = irf.createAssignment(TokenStream.NOP, (Node)nameFoo1, (Node)zero, null, false);
|
||||
Object exprStmt = irf.createExprStatement(asgn1, 0);
|
||||
irf.addChildToBack(funcBlock, exprStmt);
|
||||
|
||||
Object nameA2 = irf.createName("a");
|
||||
Object throwStmt = irf.createThrow(nameA2, 0);
|
||||
irf.addChildToBack(funcBlock, throwStmt);
|
||||
|
||||
Object nameFoo2 = irf.createName("foo");
|
||||
Object rtrnStmt = irf.createReturn(nameFoo2, 0);
|
||||
irf.addChildToBack(funcBlock, rtrnStmt);
|
||||
|
||||
Object args = irf.createLeaf(TokenStream.LP);
|
||||
Object function = irf.createFunction("TestFunction", args, funcBlock, "SourceName", 0, 0, null);
|
||||
tf = (FunctionNode)(((Node)function).getProp(Node.FUNCTION_PROP));
|
||||
irf.addChildToBack(scriptBlock, function);
|
||||
|
||||
/*
|
||||
a = 1.0
|
||||
*/
|
||||
Object nameA = irf.createName("a");
|
||||
Object number1 = irf.createNumber(new Double(1));
|
||||
Object setNameA = irf.createAssignment(TokenStream.NOP, (Node)nameA, (Node)number1, null, false);
|
||||
Object exprStmt2 = irf.createExprStatement(setNameA, 0);
|
||||
irf.addChildToBack(scriptBlock, exprStmt2);
|
||||
|
||||
/*
|
||||
try {
|
||||
c = TestFunction()
|
||||
}
|
||||
catch (e) {
|
||||
b = 2.0
|
||||
}
|
||||
*/
|
||||
Object nameC = irf.createName("c");
|
||||
Object nameTF = irf.createName("TestFunction");
|
||||
Object funCall = irf.createUnary(TokenStream.CALL, nameTF);
|
||||
Object setNameC = irf.createAssignment(TokenStream.NOP, (Node)nameC, (Node)funCall, null, false);
|
||||
Object exprStmt3 = irf.createExprStatement(setNameC, 0);
|
||||
Object tryBlock = irf.createLeaf(TokenStream.BLOCK);
|
||||
irf.addChildToBack(tryBlock, exprStmt3);
|
||||
|
||||
|
||||
Object nameB = irf.createName("b");
|
||||
Object number2 = irf.createNumber(new Double(2));
|
||||
Object setNameB = irf.createAssignment(TokenStream.NOP, (Node)nameB, (Node)number2, null, false);
|
||||
Object exprStmt4 = irf.createExprStatement(setNameB, 0);
|
||||
Object catchClause = irf.createCatch("e", null, exprStmt4, 0);
|
||||
Object catchBlock = irf.createLeaf(TokenStream.BLOCK);
|
||||
irf.addChildToBack(catchBlock, catchClause);
|
||||
|
||||
Object tryStmt = irf.createTryCatchFinally(tryBlock, catchBlock, null, 0);
|
||||
|
||||
irf.addChildToBack(scriptBlock, tryStmt);
|
||||
|
||||
|
||||
|
||||
Object script = irf.createScript(scriptBlock, "SourceName", 0, 0, null);
|
||||
|
||||
|
||||
System.out.println(((Node)script).toStringTree());
|
||||
|
||||
Interpreter interp = new Interpreter();
|
||||
interp.executeScript((Node)script);
|
||||
|
||||
}
|
||||
|
||||
}
|
Загрузка…
Ссылка в новой задаче