Search in sources :

Example 1 with SymbolTable

use of com.googlecode.aviator.lexer.SymbolTable in project aviatorscript by killme2008.

the class ASMCodeGeneratorUnitTest method testOnLambdaDefine.

@Test
public void testOnLambdaDefine() throws Exception {
    this.codeGenerator.setParser(new Parser() {

        @Override
        public void setCodeGenerator(final CodeGenerator codeGenerator) {
        }

        @Override
        public void restoreScope(final ScopeInfo info) {
        }

        @Override
        public SymbolTable getSymbolTable() {
            return null;
        }

        @Override
        public CodeGenerator getCodeGenerator() {
            return ASMCodeGeneratorUnitTest.this.codeGenerator;
        }

        @Override
        public ScopeInfo enterScope(final boolean inForLoop) {
            return null;
        }
    });
    assertNull(this.codeGenerator.getLambdaGenerator());
    this.codeGenerator.onLambdaDefineStart(new Variable("lambda", 0, 0));
    LambdaGenerator lambdaGenerator = this.codeGenerator.getLambdaGenerator();
    assertNotNull(lambdaGenerator);
    this.codeGenerator.onLambdaArgument(new Variable("x", 0, 1), new FunctionParam(0, "x", false));
    this.codeGenerator.onLambdaArgument(new Variable("y", 0, 2), new FunctionParam(1, "y", false));
    this.codeGenerator.onLambdaBodyStart(new Variable(">", 0, 3));
    lambdaGenerator.onConstant(new Variable("x", 0, 4));
    lambdaGenerator.onConstant(new Variable("y", 0, 5));
    lambdaGenerator.onAdd(null);
    this.codeGenerator.onLambdaBodyEnd(new Variable("end", 0, 7));
    HashMap<String, Object> env = new HashMap<String, Object>();
    env.put("x", 2);
    env.put("y", 3);
    Object result = eval(env);
    assertTrue(result instanceof LambdaFunction);
    assertEquals(5, ((LambdaFunction) result).call(env, new AviatorJavaType("x"), new AviatorJavaType("y")).getValue(env));
    assertNull(this.codeGenerator.getLambdaGenerator());
}
Also used : LambdaGenerator(com.googlecode.aviator.code.LambdaGenerator) Variable(com.googlecode.aviator.lexer.token.Variable) HashMap(java.util.HashMap) SymbolTable(com.googlecode.aviator.lexer.SymbolTable) ScopeInfo(com.googlecode.aviator.parser.ScopeInfo) LambdaFunction(com.googlecode.aviator.runtime.function.LambdaFunction) CodeGenerator(com.googlecode.aviator.code.CodeGenerator) Parser(com.googlecode.aviator.parser.Parser) AviatorJavaType(com.googlecode.aviator.runtime.type.AviatorJavaType) FunctionParam(com.googlecode.aviator.runtime.FunctionParam) Test(org.junit.Test)

Aggregations

CodeGenerator (com.googlecode.aviator.code.CodeGenerator)1 LambdaGenerator (com.googlecode.aviator.code.LambdaGenerator)1 SymbolTable (com.googlecode.aviator.lexer.SymbolTable)1 Variable (com.googlecode.aviator.lexer.token.Variable)1 Parser (com.googlecode.aviator.parser.Parser)1 ScopeInfo (com.googlecode.aviator.parser.ScopeInfo)1 FunctionParam (com.googlecode.aviator.runtime.FunctionParam)1 LambdaFunction (com.googlecode.aviator.runtime.function.LambdaFunction)1 AviatorJavaType (com.googlecode.aviator.runtime.type.AviatorJavaType)1 HashMap (java.util.HashMap)1 Test (org.junit.Test)1