01: /*=============================================================================
02: * Copyright Texas Instruments 2000. All Rights Reserved.
03: *
04: * This program is free software; you can redistribute it and/or
05: * modify it under the terms of the GNU Lesser General Public
06: * License as published by the Free Software Foundation; either
07: * version 2 of the License, or (at your option) any later version.
08: *
09: * This program is distributed in the hope that it will be useful,
10: * but WITHOUT ANY WARRANTY; without even the implied warranty of
11: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12: * Lesser General Public License for more details.
13: *
14: * You should have received a copy of the GNU Lesser General Public
15: * License along with this library; if not, write to the Free Software
16: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17: *
18: * $ProjectHeader: OSCRIPT 0.155 Fri, 20 Dec 2002 18:34:22 -0800 rclark $
19: */
20:
21: package oscript;
22:
23: import oscript.data.Scope;
24: import oscript.util.*;
25: import oscript.exceptions.PackagedScriptObjectException;
26:
27: /**
28: * A <code>NodeEvaluator</code> is created by the <code>NodeFactory</code> to
29: * evaluate a node. The node-evaluator can be used any number of times in
30: * order to evaluate a node, and must be thread safe.
31: *
32: * @author Rob Clark (rob@ti.com)
33: * <!--$Format: " * @version $Revision$"$-->
34: * @version 1.2
35: */
36: public abstract class NodeEvaluator {
37: /**
38: * Evaluate, in the specified scope.
39: *
40: * @param sf the stack frame to evaluate the node in
41: * @param scope the scope to evaluate the node in
42: * @return the result of evaluating the node
43: */
44: public abstract Object evalNode(StackFrame sf, Scope scope)
45: throws PackagedScriptObjectException;
46:
47: /**
48: * Get the file that this node was parsed from.
49: *
50: * @return the file
51: */
52: public abstract oscript.fs.AbstractFile getFile();
53:
54: /**
55: * Get the function symbol (name), if this node evaluator is a function,
56: * otherwise return <code>-1</code>.
57: *
58: * @return the symbol, or <code>-1</code>
59: */
60: public abstract int getId();
61:
62: public static final int ALL = 0x00;
63: public static final int PUBPROT = 0x01;
64: public static final int PRIVATE = 0x02;
65:
66: public static final int[] SMIT_PERMS = { ALL, PUBPROT, PRIVATE };
67:
68: /**
69: * Get the SMIT for the scope(s) created when invoking this node evaluator.
70: *
71: * @param perm <code>PRIVATE</code>, <code>PUBPROT</code>,
72: * <code>ALL</code>
73: */
74: public abstract SymbolTable getSharedMemberIndexTable(int perm);
75: }
76:
77: /*
78: * Local Variables:
79: * tab-width: 2
80: * indent-tabs-mode: nil
81: * mode: java
82: * c-indentation-style: java
83: * c-basic-offset: 2
84: * eval: (c-set-offset 'substatement-open '0)
85: * eval: (c-set-offset 'case-label '+)
86: * eval: (c-set-offset 'inclass '+)
87: * eval: (c-set-offset 'inline-open '0)
88: * End:
89: */
|