Repository: incubator-systemml Updated Branches: refs/heads/master ac04b5708 -> 14fd9da1b
[MINOR] Cleanup parser data structures (unused kind/default fields) Project: http://git-wip-us.apache.org/repos/asf/incubator-systemml/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-systemml/commit/214b1772 Tree: http://git-wip-us.apache.org/repos/asf/incubator-systemml/tree/214b1772 Diff: http://git-wip-us.apache.org/repos/asf/incubator-systemml/diff/214b1772 Branch: refs/heads/master Commit: 214b17725e2394187ed873aa25a544247f8cfb8a Parents: ac04b57 Author: Matthias Boehm <mboe...@gmail.com> Authored: Fri May 26 21:57:54 2017 -0700 Committer: Matthias Boehm <mboe...@gmail.com> Committed: Fri May 26 21:57:54 2017 -0700 ---------------------------------------------------------------------- .../apache/sysml/parser/BinaryExpression.java | 6 -- .../apache/sysml/parser/BooleanExpression.java | 2 - .../apache/sysml/parser/BooleanIdentifier.java | 11 +-- .../sysml/parser/BuiltinFunctionExpression.java | 5 +- .../org/apache/sysml/parser/DMLTranslator.java | 80 +++++++++----------- .../org/apache/sysml/parser/DataExpression.java | 56 ++++++-------- .../org/apache/sysml/parser/DataIdentifier.java | 29 +------ .../apache/sysml/parser/DoubleIdentifier.java | 18 ++--- .../org/apache/sysml/parser/Expression.java | 24 ++---- .../sysml/parser/ExternalFunctionStatement.java | 1 - .../sysml/parser/FunctionCallIdentifier.java | 9 +-- .../apache/sysml/parser/FunctionStatement.java | 1 - .../org/apache/sysml/parser/Identifier.java | 1 - .../apache/sysml/parser/IndexedIdentifier.java | 4 +- .../org/apache/sysml/parser/IntIdentifier.java | 18 ++--- .../ParameterizedBuiltinFunctionExpression.java | 10 +-- .../sysml/parser/RelationalExpression.java | 3 - .../org/apache/sysml/parser/StatementBlock.java | 26 ++----- .../apache/sysml/parser/StringIdentifier.java | 10 +-- .../cp/FunctionCallCPInstruction.java | 51 ++++++------- 20 files changed, 128 insertions(+), 237 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/214b1772/src/main/java/org/apache/sysml/parser/BinaryExpression.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/parser/BinaryExpression.java b/src/main/java/org/apache/sysml/parser/BinaryExpression.java index baebcd0..121e488 100644 --- a/src/main/java/org/apache/sysml/parser/BinaryExpression.java +++ b/src/main/java/org/apache/sysml/parser/BinaryExpression.java @@ -24,15 +24,11 @@ import java.util.HashMap; public class BinaryExpression extends Expression { - private Expression _left; private Expression _right; private BinaryOp _opcode; - public Expression rewriteExpression(String prefix) throws LanguageException{ - - BinaryExpression newExpr = new BinaryExpression(this._opcode, this.getFilename(), this.getBeginLine(), this.getBeginColumn(), this.getEndLine(), this.getEndColumn()); newExpr.setLeft(_left.rewriteExpression(prefix)); @@ -41,7 +37,6 @@ public class BinaryExpression extends Expression } public BinaryExpression(BinaryOp bop) { - _kind = Kind.BinaryOp; _opcode = bop; setFilename("MAIN SCRIPT"); @@ -52,7 +47,6 @@ public class BinaryExpression extends Expression } public BinaryExpression(BinaryOp bop, String filename, int beginLine, int beginColumn, int endLine, int endColumn) { - _kind = Kind.BinaryOp; _opcode = bop; setFilename(filename); http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/214b1772/src/main/java/org/apache/sysml/parser/BooleanExpression.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/parser/BooleanExpression.java b/src/main/java/org/apache/sysml/parser/BooleanExpression.java index 8dd84e5..2996da5 100644 --- a/src/main/java/org/apache/sysml/parser/BooleanExpression.java +++ b/src/main/java/org/apache/sysml/parser/BooleanExpression.java @@ -30,7 +30,6 @@ public class BooleanExpression extends Expression private BooleanOp _opcode; public BooleanExpression(BooleanOp bop){ - _kind = Kind.BooleanOp; _opcode = bop; setFilename("MAIN SCRIPT"); @@ -41,7 +40,6 @@ public class BooleanExpression extends Expression } public BooleanExpression(BooleanOp bop, String filename, int beginLine, int beginColumn, int endLine, int endColumn){ - _kind = Kind.BooleanOp; _opcode = bop; setFilename(filename); http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/214b1772/src/main/java/org/apache/sysml/parser/BooleanIdentifier.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/parser/BooleanIdentifier.java b/src/main/java/org/apache/sysml/parser/BooleanIdentifier.java index 2bb441e..501926c 100644 --- a/src/main/java/org/apache/sysml/parser/BooleanIdentifier.java +++ b/src/main/java/org/apache/sysml/parser/BooleanIdentifier.java @@ -23,18 +23,15 @@ package org.apache.sysml.parser; public class BooleanIdentifier extends ConstIdentifier { - private boolean _val; - public BooleanIdentifier(boolean val, String filename, int blp, int bcp, int elp, int ecp){ super(); _val = val; - _kind = Kind.Data; - this.setDimensions(0,0); - this.computeDataType(); - this.setValueType(ValueType.BOOLEAN); - this.setAllPositions(filename, blp, bcp, elp, ecp); + setDimensions(0,0); + computeDataType(); + setValueType(ValueType.BOOLEAN); + setAllPositions(filename, blp, bcp, elp, ecp); } public Expression rewriteExpression(String prefix) throws LanguageException{ http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/214b1772/src/main/java/org/apache/sysml/parser/BuiltinFunctionExpression.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/parser/BuiltinFunctionExpression.java b/src/main/java/org/apache/sysml/parser/BuiltinFunctionExpression.java index 5efa3e9..e3b3e79 100644 --- a/src/main/java/org/apache/sysml/parser/BuiltinFunctionExpression.java +++ b/src/main/java/org/apache/sysml/parser/BuiltinFunctionExpression.java @@ -28,14 +28,12 @@ import org.apache.sysml.runtime.util.ConvolutionUtils; public class BuiltinFunctionExpression extends DataIdentifier { - protected Expression[] _args = null; private BuiltinFunctionOp _opcode; public BuiltinFunctionExpression(BuiltinFunctionOp bifop, ArrayList<ParameterExpression> args, String fname, int blp, int bcp, int elp, int ecp) { - _kind = Kind.BuiltinFunctionOp; _opcode = bifop; - this.setAllPositions(fname, blp, bcp, elp, ecp); + setAllPositions(fname, blp, bcp, elp, ecp); args = expandConvolutionArguments(args); _args = new Expression[args.size()]; for(int i=0; i < args.size(); i++) { @@ -44,7 +42,6 @@ public class BuiltinFunctionExpression extends DataIdentifier } public BuiltinFunctionExpression(BuiltinFunctionOp bifop, Expression[] args, String fname, int blp, int bcp, int elp, int ecp) { - _kind = Kind.BuiltinFunctionOp; _opcode = bifop; _args = new Expression[args.length]; for(int i=0; i < args.length; i++) { http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/214b1772/src/main/java/org/apache/sysml/parser/DMLTranslator.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/parser/DMLTranslator.java b/src/main/java/org/apache/sysml/parser/DMLTranslator.java index 0ff6c60..a40c736 100644 --- a/src/main/java/org/apache/sysml/parser/DMLTranslator.java +++ b/src/main/java/org/apache/sysml/parser/DMLTranslator.java @@ -1403,72 +1403,64 @@ public class DMLTranslator * @throws ParseException if ParseException occurs */ private Hop processExpression(Expression source, DataIdentifier target, HashMap<String, Hop> hops) throws ParseException { - if (source.getKind() == Expression.Kind.BinaryOp) { - return processBinaryExpression((BinaryExpression) source, target, hops); - } else if (source.getKind() == Expression.Kind.RelationalOp) { - return processRelationalExpression((RelationalExpression) source, target, hops); - } else if (source.getKind() == Expression.Kind.BooleanOp) { - return processBooleanExpression((BooleanExpression) source, target, hops); - } else if (source.getKind() == Expression.Kind.Data) { - if (source instanceof IndexedIdentifier){ - IndexedIdentifier sourceIndexed = (IndexedIdentifier) source; - return processIndexingExpression(sourceIndexed,target,hops); - } else if (source instanceof IntIdentifier) { + try { + if( source instanceof BinaryExpression ) + return processBinaryExpression((BinaryExpression) source, target, hops); + else if( source instanceof RelationalExpression ) + return processRelationalExpression((RelationalExpression) source, target, hops); + else if( source instanceof BooleanExpression ) + return processBooleanExpression((BooleanExpression) source, target, hops); + else if( source instanceof BuiltinFunctionExpression ) + return processBuiltinFunctionExpression((BuiltinFunctionExpression) source, target, hops); + else if( source instanceof ParameterizedBuiltinFunctionExpression ) + return processParameterizedBuiltinFunctionExpression((ParameterizedBuiltinFunctionExpression)source, target, hops); + else if( source instanceof DataExpression ) { + Hop ae = (Hop)processDataExpression((DataExpression)source, target, hops); + if (ae instanceof DataOp){ + String formatName = ((DataExpression)source).getVarParam(DataExpression.FORMAT_TYPE).toString(); + ((DataOp)ae).setInputFormatType(Expression.convertFormatType(formatName)); + } + return ae; + } + else if (source instanceof IndexedIdentifier) + return processIndexingExpression((IndexedIdentifier) source,target,hops); + else if (source instanceof IntIdentifier) { IntIdentifier sourceInt = (IntIdentifier) source; LiteralOp litop = new LiteralOp(sourceInt.getValue()); litop.setAllPositions(sourceInt.getBeginLine(), sourceInt.getBeginColumn(), sourceInt.getEndLine(), sourceInt.getEndColumn()); setIdentifierParams(litop, sourceInt); return litop; - } else if (source instanceof DoubleIdentifier) { + } + else if (source instanceof DoubleIdentifier) { DoubleIdentifier sourceDouble = (DoubleIdentifier) source; LiteralOp litop = new LiteralOp(sourceDouble.getValue()); litop.setAllPositions(sourceDouble.getBeginLine(), sourceDouble.getBeginColumn(), sourceDouble.getEndLine(), sourceDouble.getEndColumn()); setIdentifierParams(litop, sourceDouble); return litop; - } else if (source instanceof DataIdentifier) { - DataIdentifier sourceId = (DataIdentifier) source; - return hops.get(sourceId.getName()); - } else if (source instanceof BooleanIdentifier) { + } + else if (source instanceof BooleanIdentifier) { BooleanIdentifier sourceBoolean = (BooleanIdentifier) source; LiteralOp litop = new LiteralOp(sourceBoolean.getValue()); litop.setAllPositions(sourceBoolean.getBeginLine(), sourceBoolean.getBeginColumn(), sourceBoolean.getEndLine(), sourceBoolean.getEndColumn()); setIdentifierParams(litop, sourceBoolean); return litop; - } else if (source instanceof StringIdentifier) { + } + else if (source instanceof StringIdentifier) { StringIdentifier sourceString = (StringIdentifier) source; LiteralOp litop = new LiteralOp(sourceString.getValue()); litop.setAllPositions(sourceString.getBeginLine(), sourceString.getBeginColumn(), sourceString.getEndLine(), sourceString.getEndColumn()); setIdentifierParams(litop, sourceString); return litop; - } - } else if (source.getKind() == Expression.Kind.BuiltinFunctionOp) { - try { - return processBuiltinFunctionExpression((BuiltinFunctionExpression) source, target, hops); - } catch (HopsException e) { - throw new ParseException(e.getMessage()); - } - } else if (source.getKind() == Expression.Kind.ParameterizedBuiltinFunctionOp ) { - try { - return processParameterizedBuiltinFunctionExpression((ParameterizedBuiltinFunctionExpression)source, target, hops); - } catch ( HopsException e ) { - throw new ParseException(e.getMessage()); - } - } else if (source.getKind() == Expression.Kind.DataOp ) { - try { - Hop ae = (Hop)processDataExpression((DataExpression)source, target, hops); - - if (ae instanceof DataOp){ - String formatName = ((DataExpression)source).getVarParam(DataExpression.FORMAT_TYPE).toString(); - ((DataOp)ae).setInputFormatType(Expression.convertFormatType(formatName)); - } - //hops.put(target.getName(), ae); - return ae; - } catch ( Exception e ) { - throw new ParseException(e.getMessage()); - } + } + else if (source instanceof DataIdentifier) + return hops.get(((DataIdentifier) source).getName()); + } + catch ( Exception e ) { + throw new ParseException(e.getMessage()); } + return null; - } // end method processExpression + } private DataIdentifier createTarget(Expression source) { Identifier id = source.getOutput(); http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/214b1772/src/main/java/org/apache/sysml/parser/DataExpression.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/parser/DataExpression.java b/src/main/java/org/apache/sysml/parser/DataExpression.java index bb10af4..51a51c9 100644 --- a/src/main/java/org/apache/sysml/parser/DataExpression.java +++ b/src/main/java/org/apache/sysml/parser/DataExpression.java @@ -380,11 +380,9 @@ public class DataExpression extends DataIdentifier public DataExpression(DataOp op, HashMap<String,Expression> varParams, String filename, int blp, int bcp, int elp, int ecp) { - - _kind = Kind.DataOp; _opcode = op; _varParams = varParams; - this.setAllPositions(filename, blp, bcp, elp, ecp); + setAllPositions(filename, blp, bcp, elp, ecp); } public Expression rewriteExpression(String prefix) throws LanguageException { @@ -515,26 +513,23 @@ public class DataExpression extends DataIdentifier if (fileNameExpr instanceof ConstIdentifier){ return fileNameExpr.toString(); } - else if (fileNameExpr instanceof BinaryExpression){ + else if (fileNameExpr instanceof BinaryExpression) { BinaryExpression expr = (BinaryExpression)fileNameExpr; - - if (expr.getKind()== Expression.Kind.BinaryOp){ - Expression.BinaryOp op = expr.getOpCode(); - switch (op){ - case PLUS: - filename = ""; - filename = fileNameCat(expr, currConstVars, filename, conditional); - // Since we have computed the value of filename, we update - // varParams with a const string value - StringIdentifier fileString = new StringIdentifier(filename, - this.getFilename(), this.getBeginLine(), this.getBeginColumn(), - this.getEndLine(), this.getEndColumn()); - removeVarParam(IO_FILENAME); - addVarParam(IO_FILENAME, fileString); - break; - default: - raiseValidateError("for read method, parameter " + IO_FILENAME + " can only be const string concatenations. ", conditional); - } + Expression.BinaryOp op = expr.getOpCode(); + switch (op){ + case PLUS: + filename = ""; + filename = fileNameCat(expr, currConstVars, filename, conditional); + // Since we have computed the value of filename, we update + // varParams with a const string value + StringIdentifier fileString = new StringIdentifier(filename, + this.getFilename(), this.getBeginLine(), this.getBeginColumn(), + this.getEndLine(), this.getEndColumn()); + removeVarParam(IO_FILENAME); + addVarParam(IO_FILENAME, fileString); + break; + default: + raiseValidateError("for read method, parameter " + IO_FILENAME + " can only be const string concatenations. ", conditional); } } else { @@ -1728,17 +1723,14 @@ public class DataExpression extends DataIdentifier { // Processing the left node first if (expr.getLeft() instanceof BinaryExpression - && ((BinaryExpression)expr.getLeft()).getKind()== BinaryExpression.Kind.BinaryOp - && ((BinaryExpression)expr.getLeft()).getOpCode() == BinaryOp.PLUS){ + && ((BinaryExpression)expr.getLeft()).getOpCode() == BinaryOp.PLUS){ filename = fileNameCat((BinaryExpression)expr.getLeft(), currConstVars, filename, conditional)+ filename; } else if (expr.getLeft() instanceof ConstIdentifier){ filename = ((ConstIdentifier)expr.getLeft()).toString()+ filename; } else if (expr.getLeft() instanceof DataIdentifier - && ((DataIdentifier)expr.getLeft()).getDataType() == Expression.DataType.SCALAR - && ((DataIdentifier)expr.getLeft()).getKind() == Expression.Kind.Data){ - //&& ((DataIdentifier)expr.getLeft()).getValueType() == Expression.ValueType.STRING){ + && ((DataIdentifier)expr.getLeft()).getDataType() == Expression.DataType.SCALAR){ String name = ((DataIdentifier)expr.getLeft()).getName(); filename = ((StringIdentifier)currConstVars.get(name)).getValue() + filename; } @@ -1746,9 +1738,8 @@ public class DataExpression extends DataIdentifier raiseValidateError("Parameter " + IO_FILENAME + " only supports a const string or const string concatenations.", conditional); } // Now process the right node - if (expr.getRight()instanceof BinaryExpression - && ((BinaryExpression)expr.getRight()).getKind()== BinaryExpression.Kind.BinaryOp - && ((BinaryExpression)expr.getRight()).getOpCode() == BinaryOp.PLUS){ + if (expr.getRight() instanceof BinaryExpression + && ((BinaryExpression)expr.getRight()).getOpCode() == BinaryOp.PLUS){ filename = filename + fileNameCat((BinaryExpression)expr.getRight(), currConstVars, filename, conditional); } // DRB: CHANGE @@ -1756,9 +1747,8 @@ public class DataExpression extends DataIdentifier filename = filename + ((ConstIdentifier)expr.getRight()).toString(); } else if (expr.getRight() instanceof DataIdentifier - && ((DataIdentifier)expr.getRight()).getDataType() == Expression.DataType.SCALAR - && ((DataIdentifier)expr.getRight()).getKind() == Expression.Kind.Data - && ((DataIdentifier)expr.getRight()).getValueType() == Expression.ValueType.STRING){ + && ((DataIdentifier)expr.getRight()).getDataType() == Expression.DataType.SCALAR + && ((DataIdentifier)expr.getRight()).getValueType() == Expression.ValueType.STRING){ String name = ((DataIdentifier)expr.getRight()).getName(); filename = filename + ((StringIdentifier)currConstVars.get(name)).getValue(); } http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/214b1772/src/main/java/org/apache/sysml/parser/DataIdentifier.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/parser/DataIdentifier.java b/src/main/java/org/apache/sysml/parser/DataIdentifier.java index 158829a..1cd00d1 100644 --- a/src/main/java/org/apache/sysml/parser/DataIdentifier.java +++ b/src/main/java/org/apache/sysml/parser/DataIdentifier.java @@ -22,17 +22,13 @@ package org.apache.sysml.parser; public class DataIdentifier extends Identifier { - - protected String _name; - protected String _valueTypeString; - protected String _defaultValue; + protected String _name; + protected String _valueTypeString; public DataIdentifier(DataIdentifier passed){ setProperties(passed); - _kind = Kind.Data; _name = passed.getName(); _valueTypeString = passed.getValueType().toString(); - _defaultValue = passed.getDefaultValue(); // set location information setFilename(passed.getFilename()); @@ -44,7 +40,7 @@ public class DataIdentifier extends Identifier public Expression rewriteExpression(String prefix) throws LanguageException{ DataIdentifier newId = new DataIdentifier(this); - String newIdName = prefix + this._name; + String newIdName = prefix + _name; newId.setName(newIdName); return newId; @@ -53,23 +49,10 @@ public class DataIdentifier extends Identifier public DataIdentifier(String name){ super(); _name = name; - _kind = Kind.Data; - _defaultValue = null; - } - /* - public DataIdentifier(String name, int line, int col){ - super(); - _name = name; - _kind = Kind.Data; - _defaultValue = null; - } - */ public DataIdentifier(){ _name = null; - _kind = null; - _defaultValue = null; } public String getName(){ @@ -78,12 +61,6 @@ public class DataIdentifier extends Identifier public void setName(String name){ _name = name; } - public String getDefaultValue(){ - return _defaultValue; - } - public void setDefaultValue(String val){ - _defaultValue = val; - } @Override public String toString() { http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/214b1772/src/main/java/org/apache/sysml/parser/DoubleIdentifier.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/parser/DoubleIdentifier.java b/src/main/java/org/apache/sysml/parser/DoubleIdentifier.java index 31ce3c3..febdbb4 100644 --- a/src/main/java/org/apache/sysml/parser/DoubleIdentifier.java +++ b/src/main/java/org/apache/sysml/parser/DoubleIdentifier.java @@ -32,21 +32,19 @@ public class DoubleIdentifier extends ConstIdentifier public DoubleIdentifier(double val, String filename, int blp, int bcp, int elp, int ecp){ super(); _val = val; - _kind = Kind.Data; - this.setDimensions(0,0); - this.computeDataType(); - this.setValueType(ValueType.DOUBLE); - this.setAllPositions(filename, blp, bcp, elp, ecp); + setDimensions(0,0); + computeDataType(); + setValueType(ValueType.DOUBLE); + setAllPositions(filename, blp, bcp, elp, ecp); } public DoubleIdentifier(DoubleIdentifier d, String filename, int blp, int bcp, int elp, int ecp){ super(); _val = d.getValue(); - _kind = Kind.Data; - this.setDimensions(0,0); - this.computeDataType(); - this.setValueType(ValueType.DOUBLE); - this.setAllPositions(filename, blp, bcp, elp, ecp); + setDimensions(0,0); + computeDataType(); + setValueType(ValueType.DOUBLE); + setAllPositions(filename, blp, bcp, elp, ecp); } public Expression rewriteExpression(String prefix) throws LanguageException{ http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/214b1772/src/main/java/org/apache/sysml/parser/Expression.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/parser/Expression.java b/src/main/java/org/apache/sysml/parser/Expression.java index 1bb7b35..01a0a77 100644 --- a/src/main/java/org/apache/sysml/parser/Expression.java +++ b/src/main/java/org/apache/sysml/parser/Expression.java @@ -26,19 +26,12 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.sysml.hops.Hop.FileFormatTypes; +import org.apache.sysml.runtime.controlprogram.parfor.util.IDSequence; public abstract class Expression { /** - * The kind of expression. Can be an operator (unary operator, binary operator, boolean operator, built-in function operator, - * parameterized built-in function operator, data operator, relational operator, external built-in function operator, function call operator), data, or literal. - */ - public enum Kind { - BinaryOp, BooleanOp, BuiltinFunctionOp, ParameterizedBuiltinFunctionOp, DataOp, Data, RelationalOp, FunctionCallOp - }; - - /** * Binary operators. */ public enum BinaryOp { @@ -194,19 +187,16 @@ public abstract class Expression }; protected static final Log LOG = LogFactory.getLog(Expression.class.getName()); - - public abstract Expression rewriteExpression(String prefix) throws LanguageException; - - protected Kind _kind; + private static final IDSequence _tempId = new IDSequence(); protected Identifier[] _outputs; - private static int _tempId; - public Expression() { _outputs = null; } + public abstract Expression rewriteExpression(String prefix) throws LanguageException; + public void setOutput(Identifier output) { if ( _outputs == null) { _outputs = new Identifier[1]; @@ -214,10 +204,6 @@ public abstract class Expression _outputs[0] = output; } - public Kind getKind() { - return _kind; - } - /** * Obtain identifier. * @@ -363,7 +349,7 @@ public abstract class Expression * @return Temporary name of expression. */ public static String getTempName() { - return "parsertemp" + _tempId++; + return "parsertemp" + _tempId.getNextID(); } public abstract VariableSet variablesRead(); http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/214b1772/src/main/java/org/apache/sysml/parser/ExternalFunctionStatement.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/parser/ExternalFunctionStatement.java b/src/main/java/org/apache/sysml/parser/ExternalFunctionStatement.java index a9f76e4..14cca05 100644 --- a/src/main/java/org/apache/sysml/parser/ExternalFunctionStatement.java +++ b/src/main/java/org/apache/sysml/parser/ExternalFunctionStatement.java @@ -113,7 +113,6 @@ public class ExternalFunctionStatement extends FunctionStatement for (int i=0; i<_inputParams.size(); i++){ DataIdentifier curr = _inputParams.get(i); sb.append(curr.getName()); - if (curr.getDefaultValue() != null) sb.append(" = " + curr.getDefaultValue()); if (i < _inputParams.size()-1) sb.append(", "); } sb.append(") return ("); http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/214b1772/src/main/java/org/apache/sysml/parser/FunctionCallIdentifier.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/parser/FunctionCallIdentifier.java b/src/main/java/org/apache/sysml/parser/FunctionCallIdentifier.java index 297c8ba..8f48789 100644 --- a/src/main/java/org/apache/sysml/parser/FunctionCallIdentifier.java +++ b/src/main/java/org/apache/sysml/parser/FunctionCallIdentifier.java @@ -68,25 +68,18 @@ public class FunctionCallIdentifier extends DataIdentifier fci._name = this._name; fci._namespace = this._namespace; - fci._opcode = this._opcode; - fci._kind = Kind.FunctionCallOp; + fci._opcode = this._opcode; return fci; } - - public FunctionCallIdentifier(){} public FunctionCallIdentifier(ArrayList<ParameterExpression> paramExpressions) { - _paramExprs = paramExpressions; _opcode = null; - _kind = Kind.FunctionCallOp; } - - public FunctCallOp getOpCode() { return _opcode; } http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/214b1772/src/main/java/org/apache/sysml/parser/FunctionStatement.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/parser/FunctionStatement.java b/src/main/java/org/apache/sysml/parser/FunctionStatement.java index ea2ed5c..07a2284 100644 --- a/src/main/java/org/apache/sysml/parser/FunctionStatement.java +++ b/src/main/java/org/apache/sysml/parser/FunctionStatement.java @@ -93,7 +93,6 @@ public class FunctionStatement extends Statement for (int i=0; i<_inputParams.size(); i++){ DataIdentifier curr = _inputParams.get(i); sb.append(curr.getName()); - if (curr.getDefaultValue() != null) sb.append(" = " + curr.getDefaultValue()); if (i < _inputParams.size()-1) sb.append(", "); } sb.append(") return ("); http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/214b1772/src/main/java/org/apache/sysml/parser/Identifier.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/parser/Identifier.java b/src/main/java/org/apache/sysml/parser/Identifier.java index 8789875..4d62f1a 100644 --- a/src/main/java/org/apache/sysml/parser/Identifier.java +++ b/src/main/java/org/apache/sysml/parser/Identifier.java @@ -25,7 +25,6 @@ import org.apache.sysml.parser.LanguageException.LanguageErrorCodes; public abstract class Identifier extends Expression { - protected DataType _dataType; protected ValueType _valueType; protected long _dim1; http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/214b1772/src/main/java/org/apache/sysml/parser/IndexedIdentifier.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/parser/IndexedIdentifier.java b/src/main/java/org/apache/sysml/parser/IndexedIdentifier.java index 637e445..0fda2f9 100644 --- a/src/main/java/org/apache/sysml/parser/IndexedIdentifier.java +++ b/src/main/java/org/apache/sysml/parser/IndexedIdentifier.java @@ -569,11 +569,9 @@ public class IndexedIdentifier extends DataIdentifier newIndexedIdentifier.setOriginalDimensions(this._origDim1, this._origDim2); // set remaining properties (specific to DataIdentifier) - newIndexedIdentifier._kind = Kind.Data; newIndexedIdentifier._name = prefix + this._name; newIndexedIdentifier._valueTypeString = this.getValueType().toString(); - newIndexedIdentifier._defaultValue = this._defaultValue; - + // creates rewritten expression (deep copy) newIndexedIdentifier._rowLowerBound = (_rowLowerBound == null) ? null : _rowLowerBound.rewriteExpression(prefix); newIndexedIdentifier._rowUpperBound = (_rowUpperBound == null) ? null : _rowUpperBound.rewriteExpression(prefix); http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/214b1772/src/main/java/org/apache/sysml/parser/IntIdentifier.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/parser/IntIdentifier.java b/src/main/java/org/apache/sysml/parser/IntIdentifier.java index 070da79..60463e6 100644 --- a/src/main/java/org/apache/sysml/parser/IntIdentifier.java +++ b/src/main/java/org/apache/sysml/parser/IntIdentifier.java @@ -33,21 +33,19 @@ public class IntIdentifier extends ConstIdentifier public IntIdentifier(long val, String filename, int blp, int bcp, int elp, int ecp){ super(); _val = val; - _kind = Kind.Data; - this.setDimensions(0,0); - this.computeDataType(); - this.setValueType(ValueType.INT); - this.setAllPositions(filename, blp, bcp, elp, ecp); + setDimensions(0,0); + computeDataType(); + setValueType(ValueType.INT); + setAllPositions(filename, blp, bcp, elp, ecp); } public IntIdentifier(IntIdentifier i, String filename, int blp, int bcp, int elp, int ecp){ super(); _val = i.getValue(); - _kind = Kind.Data; - this.setDimensions(0,0); - this.computeDataType(); - this.setValueType(ValueType.INT); - this.setAllPositions(filename, blp, bcp, elp, ecp); + setDimensions(0,0); + computeDataType(); + setValueType(ValueType.INT); + setAllPositions(filename, blp, bcp, elp, ecp); } // Used only by the parser for unary operation http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/214b1772/src/main/java/org/apache/sysml/parser/ParameterizedBuiltinFunctionExpression.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/parser/ParameterizedBuiltinFunctionExpression.java b/src/main/java/org/apache/sysml/parser/ParameterizedBuiltinFunctionExpression.java index c135b74..aa888d3 100644 --- a/src/main/java/org/apache/sysml/parser/ParameterizedBuiltinFunctionExpression.java +++ b/src/main/java/org/apache/sysml/parser/ParameterizedBuiltinFunctionExpression.java @@ -107,9 +107,8 @@ public class ParameterizedBuiltinFunctionExpression extends DataIdentifier pbHopMap.put(Expression.ParameterizedBuiltinFunctionOp.TOSTRING, ParamBuiltinOp.TOSTRING); } - public static ParameterizedBuiltinFunctionExpression getParamBuiltinFunctionExpression(String functionName, ArrayList<ParameterExpression> paramExprsPassed, - String fileName, int blp, int bcp, int elp, int ecp){ - + public static ParameterizedBuiltinFunctionExpression getParamBuiltinFunctionExpression(String functionName, + ArrayList<ParameterExpression> paramExprsPassed, String fileName, int blp, int bcp, int elp, int ecp){ if (functionName == null || paramExprsPassed == null) return null; @@ -125,15 +124,14 @@ public class ParameterizedBuiltinFunctionExpression extends DataIdentifier ParameterizedBuiltinFunctionExpression retVal = new ParameterizedBuiltinFunctionExpression(pbifop,varParams, fileName, blp, bcp, elp, ecp); return retVal; - } // end method getBuiltinFunctionExpression + } public ParameterizedBuiltinFunctionExpression(ParameterizedBuiltinFunctionOp op, HashMap<String,Expression> varParams, String filename, int blp, int bcp, int elp, int ecp) { - _kind = Kind.ParameterizedBuiltinFunctionOp; _opcode = op; _varParams = varParams; - this.setAllPositions(filename, blp, bcp, elp, ecp); + setAllPositions(filename, blp, bcp, elp, ecp); } public Expression rewriteExpression(String prefix) throws LanguageException { http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/214b1772/src/main/java/org/apache/sysml/parser/RelationalExpression.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/parser/RelationalExpression.java b/src/main/java/org/apache/sysml/parser/RelationalExpression.java index c622e37..48666d0 100644 --- a/src/main/java/org/apache/sysml/parser/RelationalExpression.java +++ b/src/main/java/org/apache/sysml/parser/RelationalExpression.java @@ -25,13 +25,11 @@ import org.apache.sysml.parser.LanguageException.LanguageErrorCodes; public class RelationalExpression extends Expression { - private Expression _left; private Expression _right; private RelationalOp _opcode; public RelationalExpression(RelationalOp bop) { - _kind = Kind.RelationalOp; _opcode = bop; setFilename("MAIN SCRIPT"); @@ -42,7 +40,6 @@ public class RelationalExpression extends Expression } public RelationalExpression(RelationalOp bop, String filename, int beginLine, int beginColumn, int endLine, int endColumn) { - _kind = Kind.RelationalOp; _opcode = bop; setFilename(filename); http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/214b1772/src/main/java/org/apache/sysml/parser/StatementBlock.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/parser/StatementBlock.java b/src/main/java/org/apache/sysml/parser/StatementBlock.java index 7329ced..3947372 100644 --- a/src/main/java/org/apache/sysml/parser/StatementBlock.java +++ b/src/main/java/org/apache/sysml/parser/StatementBlock.java @@ -419,8 +419,12 @@ public class StatementBlock extends LiveVariableAnalysis } StatementBlock sblock = fstmt.getBody().get(0); - for (int i =0; i < fstmt.getInputParams().size(); i++){ - + if( fcall.getParamExprs().size() < fstmt.getInputParams().size() ) { + sourceExpr.raiseValidateError("Wrong number of function parameters: "+ + fcall.getParamExprs().size() + ", but " + fstmt.getInputParams().size()+" expected."); + } + + for (int i =0; i < fstmt.getInputParams().size(); i++) { DataIdentifier currFormalParam = fstmt.getInputParams().get(i); // create new assignment statement @@ -428,23 +432,7 @@ public class StatementBlock extends LiveVariableAnalysis DataIdentifier newTarget = new DataIdentifier(currFormalParam); newTarget.setName(newFormalParameterName); - Expression currCallParam = null; - if (fcall.getParamExprs().size() > i){ - // function call has value for parameter - currCallParam = fcall.getParamExprs().get(i).getExpr(); - } - else { - // use default value for parameter - if (fstmt.getInputParams().get(i).getDefaultValue() == null){ - currFormalParam.raiseValidateError("default parameter for " + currFormalParam + " is undefined", false); - } - currCallParam = new DataIdentifier(fstmt.getInputParams().get(i).getDefaultValue()); - currCallParam.setAllPositions( fstmt.getInputParams().get(i).getFilename(), - fstmt.getInputParams().get(i).getBeginLine(), - fstmt.getInputParams().get(i).getBeginColumn(), - fstmt.getInputParams().get(i).getEndLine(), - fstmt.getInputParams().get(i).getEndColumn()); - } + Expression currCallParam = fcall.getParamExprs().get(i).getExpr(); //auto casting of inputs on inlining (if required) ValueType targetVT = newTarget.getValueType(); http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/214b1772/src/main/java/org/apache/sysml/parser/StringIdentifier.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/parser/StringIdentifier.java b/src/main/java/org/apache/sysml/parser/StringIdentifier.java index dc91a60..6b8ba1e 100644 --- a/src/main/java/org/apache/sysml/parser/StringIdentifier.java +++ b/src/main/java/org/apache/sysml/parser/StringIdentifier.java @@ -33,12 +33,10 @@ public class StringIdentifier extends ConstIdentifier public StringIdentifier(String val, String filename, int blp, int bcp, int elp, int ecp){ super(); _val = val; - _kind = Kind.Data; - this.setDimensions(0,0); - this.computeDataType(); - this.setValueType(ValueType.STRING); - this.setAllPositions(filename, blp, bcp, elp, ecp); - + setDimensions(0,0); + computeDataType(); + setValueType(ValueType.STRING); + setAllPositions(filename, blp, bcp, elp, ecp); } public String getValue(){ http://git-wip-us.apache.org/repos/asf/incubator-systemml/blob/214b1772/src/main/java/org/apache/sysml/runtime/instructions/cp/FunctionCallCPInstruction.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/runtime/instructions/cp/FunctionCallCPInstruction.java b/src/main/java/org/apache/sysml/runtime/instructions/cp/FunctionCallCPInstruction.java index 0958aeb..9cc6bb2 100644 --- a/src/main/java/org/apache/sysml/runtime/instructions/cp/FunctionCallCPInstruction.java +++ b/src/main/java/org/apache/sysml/runtime/instructions/cp/FunctionCallCPInstruction.java @@ -30,7 +30,6 @@ import org.apache.sysml.lops.Lop; import org.apache.sysml.parser.DMLProgram; import org.apache.sysml.parser.DataIdentifier; import org.apache.sysml.parser.Expression.DataType; -import org.apache.sysml.parser.Expression.ValueType; import org.apache.sysml.runtime.DMLRuntimeException; import org.apache.sysml.runtime.DMLScriptException; import org.apache.sysml.runtime.controlprogram.FunctionProgramBlock; @@ -123,6 +122,12 @@ public class FunctionCallCPInstruction extends CPInstruction // get the function program block (stored in the Program object) FunctionProgramBlock fpb = ec.getProgram().getFunctionProgramBlock(_namespace, _functionName); + // sanity check number of function paramters + if( _boundInputParamNames.size() < fpb.getInputParams().size() ) { + throw new DMLRuntimeException("Number of bound input parameters does not match the function signature " + + "("+_boundInputParamNames.size()+", but "+fpb.getInputParams().size()+" expected)"); + } + // create bindings to formal parameters for given function call // These are the bindings passed to the FunctionProgramBlock for function execution LocalVariableMap functionVariables = new LocalVariableMap(); @@ -131,35 +136,25 @@ public class FunctionCallCPInstruction extends CPInstruction DataIdentifier currFormalParam = fpb.getInputParams().get(i); String currFormalParamName = currFormalParam.getName(); Data currFormalParamValue = null; - ValueType valType = fpb.getInputParams().get(i).getValueType(); - // CASE (a): default values, if call w/ less params than signature (scalars only) - if( i > _boundInputParamNames.size() ) - { - String defaultVal = fpb.getInputParams().get(i).getDefaultValue(); - currFormalParamValue = ec.getScalarInput(defaultVal, valType, false); + CPOperand operand = _boundInputParamOperands.get(i); + String varname = operand.getName(); + //error handling non-existing variables + if( !operand.isLiteral() && !ec.containsVariable(varname) ) { + throw new DMLRuntimeException("Input variable '"+varname+"' not existing on call of " + + DMLProgram.constructFunctionKey(_namespace, _functionName) + " (line "+getLineNum()+")."); } - // CASE (b) literals or symbol table entries - else { - CPOperand operand = _boundInputParamOperands.get(i); - String varname = operand.getName(); - //error handling non-existing variables - if( !operand.isLiteral() && !ec.containsVariable(varname) ) { - throw new DMLRuntimeException("Input variable '"+varname+"' not existing on call of " + - DMLProgram.constructFunctionKey(_namespace, _functionName) + " (line "+getLineNum()+")."); - } - //get input matrix/frame/scalar - currFormalParamValue = (operand.getDataType()!=DataType.SCALAR) ? ec.getVariable(varname) : - ec.getScalarInput(varname, operand.getValueType(), operand.isLiteral()); - - //graceful value type conversion for scalar inputs with wrong type - if( currFormalParamValue.getDataType() == DataType.SCALAR - && currFormalParamValue.getValueType() != operand.getValueType() ) - { - ScalarObject so = (ScalarObject) currFormalParamValue; - currFormalParamValue = ScalarObjectFactory - .createScalarObject(operand.getValueType(), so); - } + //get input matrix/frame/scalar + currFormalParamValue = (operand.getDataType()!=DataType.SCALAR) ? ec.getVariable(varname) : + ec.getScalarInput(varname, operand.getValueType(), operand.isLiteral()); + + //graceful value type conversion for scalar inputs with wrong type + if( currFormalParamValue.getDataType() == DataType.SCALAR + && currFormalParamValue.getValueType() != operand.getValueType() ) + { + ScalarObject so = (ScalarObject) currFormalParamValue; + currFormalParamValue = ScalarObjectFactory + .createScalarObject(operand.getValueType(), so); } functionVariables.put(currFormalParamName, currFormalParamValue);