Categories:
Audio (13)
Biotech (29)
Bytecode (36)
Database (77)
Framework (7)
Game (7)
General (507)
Graphics (53)
I/O (35)
IDE (2)
JAR Tools (101)
JavaBeans (21)
JDBC (121)
JDK (426)
JSP (20)
Logging (108)
Mail (58)
Messaging (8)
Network (84)
PDF (97)
Report (7)
Scripting (84)
Security (32)
Server (121)
Servlet (26)
SOAP (24)
Testing (54)
Web (15)
XML (309)
Collections:
Other Resources:
Rhino JavaScript Java Library Source Code
Rhino JavaScript Java Library is an open-source implementation of JavaScript written entirely in Java.
Rhino JavaScript Java Library Source Code files are provided in binary package (rhino-1.7.14.zip).
You can also browse the source code below:
✍: FYIcenter.com
⏎ org/mozilla/javascript/optimizer/ClassCompiler.java
/* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ package org.mozilla.javascript.optimizer; import org.mozilla.javascript.CompilerEnvirons; import org.mozilla.javascript.IRFactory; import org.mozilla.javascript.JavaAdapter; import org.mozilla.javascript.ObjToIntMap; import org.mozilla.javascript.Parser; import org.mozilla.javascript.ScriptRuntime; import org.mozilla.javascript.ast.AstRoot; import org.mozilla.javascript.ast.FunctionNode; import org.mozilla.javascript.ast.ScriptNode; /** * Generates class files from script sources. * * since 1.5 Release 5 * @author Igor Bukanov */ public class ClassCompiler { /** * Construct ClassCompiler that uses the specified compiler environment * when generating classes. */ public ClassCompiler(CompilerEnvirons compilerEnv) { if (compilerEnv == null) throw new IllegalArgumentException(); this.compilerEnv = compilerEnv; this.mainMethodClassName = Codegen.DEFAULT_MAIN_METHOD_CLASS; } /** * Set the class name to use for main method implementation. * The class must have a method matching * <code>public static void main(Script sc, String[] args)</code>, it will be * called when <code>main(String[] args)</code> is called in the generated * class. The class name should be fully qulified name and include the * package name like in <code>org.foo.Bar</code>. */ public void setMainMethodClass(String className) { // XXX Should this check for a valid class name? mainMethodClassName = className; } /** * Get the name of the class for main method implementation. * @see #setMainMethodClass(String) */ public String getMainMethodClass() { return mainMethodClassName; } /** * Get the compiler environment the compiler uses. */ public CompilerEnvirons getCompilerEnv() { return compilerEnv; } /** * Get the class that the generated target will extend. */ public Class<?> getTargetExtends() { return targetExtends; } /** * Set the class that the generated target will extend. * * @param extendsClass the class it extends */ public void setTargetExtends(Class<?> extendsClass) { targetExtends = extendsClass; } /** * Get the interfaces that the generated target will implement. */ public Class<?>[] getTargetImplements() { return targetImplements == null ? null : (Class[])targetImplements.clone(); } /** * Set the interfaces that the generated target will implement. * * @param implementsClasses an array of Class objects, one for each * interface the target will extend */ public void setTargetImplements(Class<?>[] implementsClasses) { targetImplements = implementsClasses == null ? null : (Class[])implementsClasses.clone(); } /** * Build class name for a auxiliary class generated by compiler. * If the compiler needs to generate extra classes beyond the main class, * it will call this function to build the auxiliary class name. * The default implementation simply appends auxMarker to mainClassName * but this can be overridden. */ protected String makeAuxiliaryClassName(String mainClassName, String auxMarker) { return mainClassName+auxMarker; } /** * Compile JavaScript source into one or more Java class files. * The first compiled class will have name mainClassName. * If the results of {@link #getTargetExtends()} or * {@link #getTargetImplements()} are not null, then the first compiled * class will extend the specified super class and implement * specified interfaces. * * @return array where elements with even indexes specifies class name * and the following odd index gives class file body as byte[] * array. The initial element of the array always holds * mainClassName and array[1] holds its byte code. */ public Object[] compileToClassFiles(String source, String sourceLocation, int lineno, String mainClassName) { Parser p = new Parser(compilerEnv); AstRoot ast = p.parse(source, sourceLocation, lineno); IRFactory irf = new IRFactory(compilerEnv); ScriptNode tree = irf.transformTree(ast); // release reference to original parse tree & parser irf = null; ast = null; p = null; Class<?> superClass = getTargetExtends(); Class<?>[] interfaces = getTargetImplements(); String scriptClassName; boolean isPrimary = (interfaces == null && superClass == null); if (isPrimary) { scriptClassName = mainClassName; } else { scriptClassName = makeAuxiliaryClassName(mainClassName, "1"); } Codegen codegen = new Codegen(); codegen.setMainMethodClass(mainMethodClassName); byte[] scriptClassBytes = codegen.compileToClassFile(compilerEnv, scriptClassName, tree, tree.getEncodedSource(), false); if (isPrimary) { return new Object[] { scriptClassName, scriptClassBytes }; } int functionCount = tree.getFunctionCount(); ObjToIntMap functionNames = new ObjToIntMap(functionCount); for (int i = 0; i != functionCount; ++i) { FunctionNode ofn = tree.getFunctionNode(i); String name = ofn.getName(); if (name != null && name.length() != 0) { functionNames.put(name, ofn.getParamCount()); } } if (superClass == null) { superClass = ScriptRuntime.ObjectClass; } byte[] mainClassBytes = JavaAdapter.createAdapterCode( functionNames, mainClassName, superClass, interfaces, scriptClassName); return new Object[] { mainClassName, mainClassBytes, scriptClassName, scriptClassBytes }; } private String mainMethodClassName; private CompilerEnvirons compilerEnv; private Class<?> targetExtends; private Class<?>[] targetImplements; }
⏎ org/mozilla/javascript/optimizer/ClassCompiler.java
Or download all of them as a single archive file:
File name: rhino-1.7.14-sources.jar File size: 1029165 bytes Release date: 2022-01-06 Download
⇒ Example code to Test rhino-runtime-1.7.14.jar
⇐ Download Rhino JavaScript Binary Package
2022-05-03, 35398👍, 1💬
Popular Posts:
ZooKeeper is a centralized service for maintaining configuration information, naming, providing dist...
How to run "jar" command from JDK tools.jar file? "jar" is the JAR (Java Archive) file management co...
How to download and install javamail-1_2.zip? The JavaMail API is a set of abstract APIs that model ...
JDK 11 jdk.dynalink.jmod is the JMOD file for JDK 11 Dynamic Linking module. JDK 11 Dynamic Linking ...
JSP(tm) Standard Tag Library 1.1 implementation - Jakarta Taglibs hosts the Standard Taglib 1.1, an ...