public Context getContext() { if (context == null){ context = new Context(null, new File(fileName)); } return context; }
public Context fetchContext(Stream stream) throws Throwable { if (stream instanceof FileStream) { return new Context( new BufferedInputStream(Stream.getInputStream(env, stream)), stream.getPath(), env.getDefaultCharset() ); } return new Context( new BufferedInputStream(Stream.getInputStream(env, stream)), stream.getPath(), env.getDefaultCharset() ); }
protected Context getContext(String file) { InputStream bootstrap = getResource(file); if (bootstrap != null) { return new Context(bootstrap, file, environment.getDefaultCharset()); } else return null; }
@Signature public void __construct(Environment env, Memory path, String moduleName, String charset) throws IOException { stream = Stream.getInputStream(env, path); Context context = new Context(stream, moduleName, Charset.forName(charset)); tokenizer = new Tokenizer(context); }
@Override public CompiledScript compile(Reader reader) throws ScriptException { try { InputStream is = new ReaderInputStream(reader); Context context = new Context(is); ModuleEntity module = environment.importModule(context); return new JPHPCompiledScript(module, environment); } catch (IOException e) { throw new ScriptException(e); } catch (Throwable e) { throw new ScriptException(new Exception(e)); } }
protected List<Token> getSyntaxTree(String code){ return getSyntaxTree(new Context(code)); }
protected List<Token> getSyntaxTree(String code){ Tokenizer tokenizer = null; try { tokenizer = new Tokenizer(new Context(code)); environment.scope.setLangMode(LangMode.DEFAULT); SyntaxAnalyzer analyzer = new SyntaxAnalyzer(environment, tokenizer); return analyzer.getTree(); } catch (IOException e) { throw new RuntimeException(e); } } }
public Memory eval(String code, ArrayMemory locals) throws Throwable { Context context = new Context(code); AbstractCompiler compiler = scope.createCompiler(this, context); ModuleEntity module = compiler.compile(); scope.loadModule(module); registerModule(module); return module.include(this, locals); }
@Test(expected = ErrorException.class) public void testUnexpectedEnd() throws IOException { Tokenizer tokenizer = new Tokenizer(new Context("foobar")); environment.scope.setLangMode(LangMode.DEFAULT); new SyntaxAnalyzer(environment, tokenizer); } }
@Test public void testSimple() throws IOException { Tokenizer tokenizer = new Tokenizer(new Context("foobar;")); SyntaxAnalyzer analyzer = new SyntaxAnalyzer(environment, tokenizer); Assert.assertTrue(analyzer.getTree().size() == 1); Assert.assertTrue(analyzer.getTree().listIterator().next() instanceof ExprStmtToken); }
@Test public void testNoArguments() throws IOException { Tokenizer tokenizer = new Tokenizer(new Context("function myFunc(){}")); SyntaxAnalyzer analyzer = new SyntaxAnalyzer(environment, tokenizer); Assert.assertTrue(analyzer.getTree().size() == 1); Assert.assertTrue(analyzer.getTree().get(0) instanceof FunctionStmtToken); FunctionStmtToken func = (FunctionStmtToken)analyzer.getTree().listIterator().next(); Assert.assertTrue(func.getArguments().size() == 0); }
@Test public void testSplitNot() throws IOException { Tokenizer tokenizer = new Tokenizer( new Context("!true") ); assertTrue(tokenizer.nextToken() instanceof BooleanNotExprToken); assertTrue(tokenizer.nextToken() instanceof BooleanExprToken); }
@Test public void testInterfacable() throws IOException { Tokenizer tokenizer = new Tokenizer(new Context("function myFunc();")); SyntaxAnalyzer analyzer = new SyntaxAnalyzer(environment, tokenizer); Assert.assertTrue(analyzer.getTree().size() == 1); Assert.assertTrue(analyzer.getTree().get(0) instanceof FunctionStmtToken); FunctionStmtToken func = (FunctionStmtToken)analyzer.getTree().listIterator().next(); Assert.assertTrue(func.isInterfacable()); } }
@Test public void testMagicString() throws IOException { Token token; Tokenizer tokenizer = new Tokenizer(new Context("\"\\.{$foo}\"")); token = tokenizer.nextToken(); assertTrue(token instanceof StringExprToken); assertEquals(".{$foo}", ((StringExprToken) token).getValue()); assertEquals(1, ((StringExprToken) token).getSegments().size()); StringExprToken.Segment segment =((StringExprToken) token).getSegments().get(0); assertEquals(1, segment.from); assertEquals(7, segment.to); }
@Test public void testBug154() throws IOException { Tokenizer tokenizer = new Tokenizer( new Context("/*// */") ); Token token = tokenizer.nextToken(); assertTrue(token instanceof CommentToken); assertEquals(CommentToken.Kind.BLOCK, ((CommentToken) token).getKind()); assertEquals("// ", ((CommentToken) token).getComment()); } }
@Test public void testStringSlashes() throws IOException { Token token; Tokenizer tokenizer = new Tokenizer(new Context( " 'foo\\'bar' \"foo\\\"bar\"")); token = tokenizer.nextToken(); assertTrue(token instanceof StringExprToken); assertEquals("foo'bar", ((StringExprToken) token).getValue()); token = tokenizer.nextToken(); assertTrue(token instanceof StringExprToken); assertEquals("foo\"bar", ((StringExprToken) token).getValue()); }
protected Memory run(String code, boolean returned){ runIndex += 1; Environment environment = new Environment(newScope()); code = "class TestClass { static function test(){ " + (returned ? "return " : "") + code + "; } }"; Context context = new Context(code); JvmCompiler compiler = new JvmCompiler(environment, context, getSyntax(context)); ModuleEntity module = compiler.compile(); environment.getScope().loadModule(module); ClassEntity entity = module.findClass("TestClass"); try { return entity.findMethod("test").invokeStatic(environment); } catch (Throwable throwable) { throw new RuntimeException(throwable); } }
@Test public void testComplexOperators() throws IOException { Tokenizer tokenizer = new Tokenizer(new Context( "== >= <= === !== != && ||")); assertTrue(tokenizer.nextToken() instanceof EqualExprToken); assertTrue(tokenizer.nextToken() instanceof GreaterOrEqualExprToken); assertTrue(tokenizer.nextToken() instanceof SmallerOrEqualToken); assertTrue(tokenizer.nextToken() instanceof IdenticalExprToken); assertTrue(tokenizer.nextToken() instanceof NotIdenticalExprToken); assertTrue(tokenizer.nextToken() instanceof BooleanNotEqualExprToken); assertTrue(tokenizer.nextToken() instanceof BooleanAndExprToken); assertTrue(tokenizer.nextToken() instanceof BooleanOrExprToken); }
@Test public void testMacro() throws IOException { Tokenizer tokenizer = new Tokenizer( new Context("__LINE__ __FILE__ __DIR__ __METHOD__ __FUNCTION__ __CLASS__ __NAMESPACE__ __TRAIT__") ); assertTrue(tokenizer.nextToken() instanceof LineMacroToken); assertTrue(tokenizer.nextToken() instanceof FileMacroToken); assertTrue(tokenizer.nextToken() instanceof DirMacroToken); assertTrue(tokenizer.nextToken() instanceof MethodMacroToken); assertTrue(tokenizer.nextToken() instanceof FunctionMacroToken); assertTrue(tokenizer.nextToken() instanceof ClassMacroToken); assertTrue(tokenizer.nextToken() instanceof NamespaceMacroToken); assertTrue(tokenizer.nextToken() instanceof TraitMacroToken); }