01: /**
02: * MVEL (The MVFLEX Expression Language)
03: *
04: * Copyright (C) 2007 Christopher Brock, MVFLEX/Valhalla Project and the Codehaus
05: *
06: * Licensed under the Apache License, Version 2.0 (the "License");
07: * you may not use this file except in compliance with the License.
08: * You may obtain a copy of the License at
09: *
10: * http://www.apache.org/licenses/LICENSE-2.0
11: *
12: * Unless required by applicable law or agreed to in writing, software
13: * distributed under the License is distributed on an "AS IS" BASIS,
14: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15: * See the License for the specific language governing permissions and
16: * limitations under the License.
17: *
18: */package org.mvel.ast;
19:
20: import static org.mvel.MVEL.eval;
21: import org.mvel.compiler.ExecutableStatement;
22: import org.mvel.integration.VariableResolver;
23: import org.mvel.integration.VariableResolverFactory;
24: import static org.mvel.util.ParseTools.doOperations;
25: import static org.mvel.util.ParseTools.subCompileExpression;
26:
27: public class OperativeAssign extends ASTNode {
28: private String varName;
29: private ExecutableStatement statement;
30: private final int operation;
31:
32: public OperativeAssign(String variableName, char[] expr,
33: int operation, int fields) {
34: this .varName = variableName;
35: this .operation = operation;
36: this .name = expr;
37:
38: if ((fields & COMPILE_IMMEDIATE) != 0) {
39: statement = (ExecutableStatement) subCompileExpression(expr);
40: }
41: }
42:
43: public Object getReducedValueAccelerated(Object ctx,
44: Object this Value, VariableResolverFactory factory) {
45: VariableResolver resolver = factory
46: .getVariableResolver(varName);
47: resolver
48: .setValue(ctx = doOperations(resolver.getValue(),
49: operation, statement.getValue(ctx, this Value,
50: factory)));
51: return ctx;
52: }
53:
54: public Object getReducedValue(Object ctx, Object this Value,
55: VariableResolverFactory factory) {
56: VariableResolver resolver = factory
57: .getVariableResolver(varName);
58: resolver.setValue(ctx = doOperations(resolver.getValue(),
59: operation, eval(name, ctx, factory)));
60: return ctx;
61: }
62: }
|