001: /* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
002: *
003: * ***** BEGIN LICENSE BLOCK *****
004: * Version: MPL 1.1/GPL 2.0
005: *
006: * The contents of this file are subject to the Mozilla Public License Version
007: * 1.1 (the "License"); you may not use this file except in compliance with
008: * the License. You may obtain a copy of the License at
009: * http://www.mozilla.org/MPL/
010: *
011: * Software distributed under the License is distributed on an "AS IS" basis,
012: * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
013: * for the specific language governing rights and limitations under the
014: * License.
015: *
016: * Contributor(s):
017: * Norris Boyd
018: *
019: * Alternatively, the contents of this file may be used under the terms of
020: * the GNU General Public License Version 2 or later (the "GPL"), in which
021: * case the provisions of the GPL are applicable instead of those above. If
022: * you wish to allow use of your version of this file only under the terms of
023: * the GPL and not to allow others to use your version of this file under the
024: * MPL, indicate your decision by deleting the provisions above and replacing
025: * them with the notice and other provisions required by the GPL. If you do
026: * not delete the provisions above, a recipient may use your version of this
027: * file under either the MPL or the GPL.
028: *
029: * ***** END LICENSE BLOCK ***** */
030:
031: package org.mozilla.javascript;
032:
033: import java.util.List;
034:
035: /**
036: * Abstraction of evaluation, which can be implemented either by an
037: * interpreter or compiler.
038: */
039: public interface Evaluator {
040:
041: /**
042: * Compile the script or function from intermediate representation
043: * tree into an executable form.
044: *
045: * @param compilerEnv Compiler environment
046: * @param tree intermediate representation
047: * @param encodedSource encoding of the source code for decompilation
048: * @param returnFunction if true, compiling a function
049: * @return an opaque object that can be passed to either
050: * createFunctionObject or createScriptObject, depending on the
051: * value of returnFunction
052: */
053: public Object compile(CompilerEnvirons compilerEnv,
054: ScriptOrFnNode tree, String encodedSource,
055: boolean returnFunction);
056:
057: /**
058: * Create a function object.
059: *
060: * @param cx Current context
061: * @param scope scope of the function
062: * @param bytecode opaque object returned by compile
063: * @param staticSecurityDomain security domain
064: * @return Function object that can be called
065: */
066: public Function createFunctionObject(Context cx, Scriptable scope,
067: Object bytecode, Object staticSecurityDomain);
068:
069: /**
070: * Create a script object.
071: *
072: * @param bytecode opaque object returned by compile
073: * @param staticSecurityDomain security domain
074: * @return Script object that can be evaluated
075: */
076: public Script createScriptObject(Object bytecode,
077: Object staticSecurityDomain);
078:
079: /**
080: * Capture stack information from the given exception.
081: * @param ex an exception thrown during execution
082: */
083: public void captureStackInfo(RhinoException ex);
084:
085: /**
086: * Get the source position information by examining the stack.
087: * @param cx Context
088: * @param linep Array object of length >= 1; getSourcePositionFromStack
089: * will assign the line number to linep[0].
090: * @return the name of the file or other source container
091: */
092: public String getSourcePositionFromStack(Context cx, int[] linep);
093:
094: /**
095: * Given a native stack trace, patch it with script-specific source
096: * and line information
097: * @param ex exception
098: * @param nativeStackTrace the native stack trace
099: * @return patched stack trace
100: */
101: public String getPatchedStack(RhinoException ex,
102: String nativeStackTrace);
103:
104: /**
105: * Get the script stack for the given exception
106: * @param ex exception from execution
107: * @return list of strings for the stack trace
108: */
109: public List getScriptStack(RhinoException ex);
110:
111: /**
112: * Mark the given script to indicate it was created by a call to
113: * eval() or to a Function constructor.
114: * @param script script to mark as from eval
115: */
116: public void setEvalScriptFlag(Script script);
117: }
|