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: * The Original Code is Rhino code, released
017: * May 6, 1999.
018: *
019: * The Initial Developer of the Original Code is
020: * Netscape Communications Corporation.
021: * Portions created by the Initial Developer are Copyright (C) 1997-1999
022: * the Initial Developer. All Rights Reserved.
023: *
024: * Contributor(s):
025: * Igor Bukanov, igor@fastmail.fm
026: * Bob Jervis
027: *
028: * Alternatively, the contents of this file may be used under the terms of
029: * the GNU General Public License Version 2 or later (the "GPL"), in which
030: * case the provisions of the GPL are applicable instead of those above. If
031: * you wish to allow use of your version of this file only under the terms of
032: * the GPL and not to allow others to use your version of this file under the
033: * MPL, indicate your decision by deleting the provisions above and replacing
034: * them with the notice and other provisions required by the GPL. If you do
035: * not delete the provisions above, a recipient may use your version of this
036: * file under either the MPL or the GPL.
037: *
038: * ***** END LICENSE BLOCK ***** */
039:
040: package org.mozilla.javascript;
041:
042: import java.util.Hashtable;
043:
044: public class CompilerEnvirons {
045: public CompilerEnvirons() {
046: errorReporter = DefaultErrorReporter.instance;
047: languageVersion = Context.VERSION_DEFAULT;
048: generateDebugInfo = true;
049: useDynamicScope = false;
050: reservedKeywordAsIdentifier = false;
051: allowMemberExprAsFunctionName = false;
052: xmlAvailable = true;
053: optimizationLevel = 0;
054: generatingSource = true;
055: strictMode = false;
056: warningAsError = false;
057: }
058:
059: public void initFromContext(Context cx) {
060: setErrorReporter(cx.getErrorReporter());
061: this .languageVersion = cx.getLanguageVersion();
062: useDynamicScope = cx.compileFunctionsWithDynamicScopeFlag;
063: generateDebugInfo = (!cx.isGeneratingDebugChanged() || cx
064: .isGeneratingDebug());
065: reservedKeywordAsIdentifier = cx
066: .hasFeature(Context.FEATURE_RESERVED_KEYWORD_AS_IDENTIFIER);
067: allowMemberExprAsFunctionName = cx
068: .hasFeature(Context.FEATURE_MEMBER_EXPR_AS_FUNCTION_NAME);
069: strictMode = cx.hasFeature(Context.FEATURE_STRICT_MODE);
070: warningAsError = cx
071: .hasFeature(Context.FEATURE_WARNING_AS_ERROR);
072: xmlAvailable = cx.hasFeature(Context.FEATURE_E4X);
073:
074: optimizationLevel = cx.getOptimizationLevel();
075:
076: generatingSource = cx.isGeneratingSource();
077: activationNames = cx.activationNames;
078: }
079:
080: public final ErrorReporter getErrorReporter() {
081: return errorReporter;
082: }
083:
084: public void setErrorReporter(ErrorReporter errorReporter) {
085: if (errorReporter == null)
086: throw new IllegalArgumentException();
087: this .errorReporter = errorReporter;
088: }
089:
090: public final int getLanguageVersion() {
091: return languageVersion;
092: }
093:
094: public void setLanguageVersion(int languageVersion) {
095: // <netbeans>
096: // Version 1.7 and version 1.8 not yet handled
097: if (languageVersion == Context.VERSION_1_7
098: || languageVersion == Context.VERSION_1_8) {
099: languageVersion = Context.VERSION_1_6;
100: }
101: // </netbeans>
102:
103: Context.checkLanguageVersion(languageVersion);
104: this .languageVersion = languageVersion;
105: }
106:
107: public final boolean isGenerateDebugInfo() {
108: return generateDebugInfo;
109: }
110:
111: public void setGenerateDebugInfo(boolean flag) {
112: this .generateDebugInfo = flag;
113: }
114:
115: // <netbeans>
116: public void setStrictMode(boolean strictMode) {
117: this .strictMode = strictMode;
118: }
119:
120: // </netbeans>
121:
122: public final boolean isUseDynamicScope() {
123: return useDynamicScope;
124: }
125:
126: public final boolean isReservedKeywordAsIdentifier() {
127: return reservedKeywordAsIdentifier;
128: }
129:
130: public void setReservedKeywordAsIdentifier(boolean flag) {
131: reservedKeywordAsIdentifier = flag;
132: }
133:
134: public final boolean isAllowMemberExprAsFunctionName() {
135: return allowMemberExprAsFunctionName;
136: }
137:
138: public void setAllowMemberExprAsFunctionName(boolean flag) {
139: allowMemberExprAsFunctionName = flag;
140: }
141:
142: public final boolean isXmlAvailable() {
143: return xmlAvailable;
144: }
145:
146: public void setXmlAvailable(boolean flag) {
147: xmlAvailable = flag;
148: }
149:
150: public final int getOptimizationLevel() {
151: return optimizationLevel;
152: }
153:
154: public void setOptimizationLevel(int level) {
155: Context.checkOptimizationLevel(level);
156: this .optimizationLevel = level;
157: }
158:
159: public final boolean isGeneratingSource() {
160: return generatingSource;
161: }
162:
163: public final boolean isStrictMode() {
164: return strictMode;
165: }
166:
167: public final boolean reportWarningAsError() {
168: return warningAsError;
169: }
170:
171: /**
172: * Specify whether or not source information should be generated.
173: * <p>
174: * Without source information, evaluating the "toString" method
175: * on JavaScript functions produces only "[native code]" for
176: * the body of the function.
177: * Note that code generated without source is not fully ECMA
178: * conformant.
179: */
180: public void setGeneratingSource(boolean generatingSource) {
181: this .generatingSource = generatingSource;
182: }
183:
184: private ErrorReporter errorReporter;
185:
186: private int languageVersion;
187: private boolean generateDebugInfo;
188: private boolean useDynamicScope;
189: private boolean reservedKeywordAsIdentifier;
190: private boolean allowMemberExprAsFunctionName;
191: private boolean xmlAvailable;
192: private int optimizationLevel;
193: private boolean generatingSource;
194: private boolean strictMode;
195: private boolean warningAsError;
196: Hashtable activationNames;
197: }
|