@Override public void generate(InjectorContext context, MethodReference methodRef) throws IOException { context.writeExpr(context.getArgument(0)); } }
@Override public void generate(InjectorContext context, MethodReference methodRef) throws IOException { switch (methodRef.getName()) { case "toJava": case "fromJava": context.writeExpr(context.getArgument(0)); break; case "arrayFromJava": context.writeExpr(context.getArgument(0)); context.getWriter().append(".data"); break; } } }
@Override public void generate(InjectorContext context, MethodReference methodRef) throws IOException { switch (methodRef.getName()) { case "asJavaClass": case "classFromResource": case "objectFromResource": case "marshall": case "getPlatformObject": context.writeExpr(context.getArgument(0)); break; case "initClass": context.writeExpr(context.getArgument(0)); context.getWriter().append(".$clinit()"); break; } }
@Override public void emit(InjectorContext context) throws IOException { emit(context.getWriter(), index -> context.writeExpr(context.getArgument(index))); }
@Override public void generate(InjectorContext context, MethodReference methodRef) throws IOException { switch (methodRef.getName()) { case "divideUnsigned": context.getWriter().append("$rt_udiv("); context.writeExpr(context.getArgument(0)); context.getWriter().append(",").ws(); context.writeExpr(context.getArgument(1)); context.getWriter().append(")"); break; case "remainderUnsigned": context.getWriter().append("$rt_umod("); context.writeExpr(context.getArgument(0)); context.getWriter().append(",").ws(); context.writeExpr(context.getArgument(1)); context.getWriter().append(")"); break; } } }
@Override public void generate(InjectorContext context, MethodReference methodRef) throws IOException { switch (methodRef.getName()) { case "getJavaException": context.getWriter().append("$rt_javaException("); context.writeExpr(context.getArgument(0)); context.getWriter().append(")"); break; case "getJSException": context.getWriter().append("$rt_jsException("); context.writeExpr(context.getArgument(0)); context.getWriter().append(")"); break; } } }
@Override public void emit(InjectorContext context) throws IOException { AstWriter astWriter = new AstWriter(context.getWriter()); int paramIndex = 0; if (!isStatic) { int index = paramIndex++; astWriter.declareNameEmitter("this", prec -> context.writeExpr(context.getArgument(index), convert(prec))); } for (int i = 0; i < parameterNames.length; ++i) { int index = paramIndex++; astWriter.declareNameEmitter(parameterNames[i], prec -> context.writeExpr(context.getArgument(index), convert(prec))); } astWriter.hoist(ast); astWriter.print(ast, convert(context.getPrecedence())); }
@Override public void generate(InjectorContext context, MethodReference methodRef) throws IOException { context.getWriter().append("$rt_").append(methodRef.getName()).append("("); context.writeExpr(context.getArgument(0)); context.getWriter().append(")"); } }
private void writePropertyAccessor(InjectorContext context, Expr property) throws IOException { if (property instanceof ConstantExpr) { String str = (String) ((ConstantExpr) property).getValue(); if (str.isEmpty()) { context.getWriter().append("[\"\"]"); return; } if (isValidIndentifier(str)) { context.getWriter().append(".").append(str); return; } } context.getWriter().append("[$rt_ustr("); context.writeExpr(property); context.getWriter().append(")]"); }
@Override public void generate(InjectorContext context, MethodReference methodRef) throws IOException { switch (methodRef.getName()) { case "newEmptyInstance": context.getWriter().append("new "); context.writeExpr(context.getArgument(0), Precedence.MEMBER_ACCESS); context.getWriter().append('.').appendField(platformClassField); context.getWriter().append("()"); break; } }
private void writeStringExpr(InjectorContext context, Expr expr) throws IOException { if (expr instanceof ConstantExpr) { String str = (String) ((ConstantExpr) expr).getValue(); context.getWriter().append('"'); context.writeEscaped(str); context.getWriter().append('"'); return; } context.getWriter().append("$rt_ustr("); context.writeExpr(expr); context.getWriter().append(")"); }
case "getProperty": if (methodRef.getDescriptor().parameterType(1) == ValueType.INTEGER) { context.writeExpr(context.getArgument(0)); context.getWriter().append('['); context.writeExpr(context.getArgument(1)); context.getWriter().append(']'); } else { context.writeExpr(context.getArgument(0)); writePropertyAccessor(context, context.getArgument(1)); context.getWriter().append('('); if (methodRef.getDescriptor().parameterType(1) == ValueType.INTEGER) { context.writeExpr(context.getArgument(0)); context.getWriter().append('['); context.writeExpr(context.getArgument(1)); } else { context.writeExpr(context.getArgument(0)); writePropertyAccessor(context, context.getArgument(1)); context.writeExpr(context.getArgument(2)); context.getWriter().append(')'); break; case "add": context.writeExpr(context.getArgument(0)); context.getWriter().append(".push("); context.writeExpr(context.getArgument(1)); context.getWriter().append(')'); break; case "has":
private void renderProperty(Expr property, InjectorContext context) throws IOException { SourceWriter writer = context.getWriter(); String name = extractPropertyName(property); if (name == null) { writer.append('['); context.writeExpr(property, Precedence.min()); writer.append(']'); } else if (!isIdentifier(name)) { writer.append("[\""); context.writeEscaped(name); writer.append("\"]"); } else { writer.append(".").append(name); } }
switch (methodRef.getName()) { case "arrayData": context.writeExpr(context.getArgument(0)); writer.append(".data"); break; case "get": context.writeExpr(context.getArgument(0), Precedence.MEMBER_ACCESS); renderProperty(context.getArgument(1), context); break; case "set": context.writeExpr(context.getArgument(0), Precedence.ASSIGNMENT.next()); renderProperty(context.getArgument(1), context); writer.ws().append('=').ws(); context.writeExpr(context.getArgument(2), Precedence.ASSIGNMENT.next()); break; case "invoke": context.writeExpr(context.getArgument(0), Precedence.GROUPING); renderProperty(context.getArgument(1), context); writer.append('('); context.writeExpr(context.getArgument(i), Precedence.min()); context.writeExpr(context.getArgument(0), Precedence.GROUPING); renderProperty(context.getArgument(1), context); writer.append("("); context.writeExpr(context.getArgument(i), Precedence.min()); context.writeExpr(context.getArgument(0), Precedence.min());
@Override public void generate(InjectorContext context, MethodReference methodRef) throws IOException { context.writeExpr(context.getArgument(0)); } }
@Override public void generate(InjectorContext context, MethodReference methodRef) throws IOException { switch (methodRef.getName()) { case "asJavaClass": case "classFromResource": case "objectFromResource": case "marshall": case "getPlatformObject": context.writeExpr(context.getArgument(0)); break; case "initClass": context.writeExpr(context.getArgument(0)); context.getWriter().append(".$clinit()"); break; } }
@Override public void emit(InjectorContext context) throws IOException { emit(context.getWriter(), index -> context.writeExpr(context.getArgument(index))); }
@Override public void emit(InjectorContext context) throws IOException { AstWriter astWriter = new AstWriter(context.getWriter()); int paramIndex = 0; if (!isStatic) { int index = paramIndex++; astWriter.declareNameEmitter("this", prec -> context.writeExpr(context.getArgument(index), convert(prec))); } for (int i = 0; i < parameterNames.length; ++i) { int index = paramIndex++; astWriter.declareNameEmitter(parameterNames[i], prec -> context.writeExpr(context.getArgument(index), convert(prec))); } astWriter.hoist(ast); astWriter.print(ast, convert(context.getPrecedence())); }
private void writeStringExpr(InjectorContext context, Expr expr) throws IOException { if (expr instanceof ConstantExpr) { String str = (String) ((ConstantExpr) expr).getValue(); context.getWriter().append('"'); context.writeEscaped(str); context.getWriter().append('"'); return; } context.getWriter().append("$rt_ustr("); context.writeExpr(expr); context.getWriter().append(")"); }
private void renderProperty(Expr property, InjectorContext context) throws IOException { SourceWriter writer = context.getWriter(); String name = extractPropertyName(property); if (name == null) { writer.append('['); context.writeExpr(property, Precedence.min()); writer.append(']'); } else if (!isIdentifier(name)) { writer.append("[\""); context.writeEscaped(name); writer.append("\"]"); } else { writer.append(".").append(name); } }