From 128c8888ccbcf46173511ee88e9bcdb1d8b3b9c9 Mon Sep 17 00:00:00 2001 From: maaz139 Date: Fri, 9 Sep 2016 01:53:03 -0700 Subject: [PATCH] Code generation minor bug fixed. Docker file added. --- Dockerfile | 48 +++++++++++++ compiler/src/casper/types/ConstantNode.java | 1 + .../src/casper/visit/GenerateSparkCode.java | 70 +++++++++++-------- 3 files changed, 91 insertions(+), 28 deletions(-) create mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..0ea8828 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,48 @@ +# Ubuntu 14.04 as base OS +FROM ubuntu:14.04 +MAINTAINER Maaz Ahmad + +# Install dependencies +RUN apt-get update && apt-get -y install curl +RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF +RUN echo "deb http://download.mono-project.com/repo/debian wheezy main" | tee /etc/apt/sources.list.d/mono-xamarin.list +RUN curl -sL https://deb.nodesource.com/setup_6.x | bash - +RUN apt-get update && apt-get -y install \ + bash \ + g++ \ + flex \ + bison \ + make \ + ant \ + openjdk-7-jdk \ + nodejs \ + unzip \ + mono-complete \ + git \ + wget + +# Install SKETCH +RUN wget "http://people.csail.mit.edu/asolar/sketch-1.7.2.tar.gz" +RUN tar -xvzf sketch-1.7.2.tar.gz +RUN rm sketch-1.7.2.tar.gz +WORKDIR sketch-1.7.2/sketch-backend/ +RUN chmod +x ./configure +RUN ./configure +RUN make +WORKDIR ../../ +RUN chmod a+rwx sketch-1.7.2/* +ENV PATH $PATH:/sketch-1.7.2/sketch-frontend/ +ENV SKETCH_HOME /sketch-1.7.2/sketch-frontend/runtime + +# Install Dafny +RUN wget -O dafny-1.9.7.zip "http://download-codeplex.sec.s-msft.com/Download/Release?ProjectName=dafny&DownloadId=1559952&FileTime=131040300896400000&Build=21031" +RUN unzip dafny-1.9.7.zip -d . +RUN rm dafny-1.9.7.zip +RUN chmod -R a+rwx dafny/* +ENV PATH $PATH:/dafny/ + +# Clone CASPER +RUN git clone https://github.com/uwplse/Casper.git +WORKDIR Casper/ +RUN git reset --hard 834d980 +RUN ant diff --git a/compiler/src/casper/types/ConstantNode.java b/compiler/src/casper/types/ConstantNode.java index c51536a..e9f3f9e 100644 --- a/compiler/src/casper/types/ConstantNode.java +++ b/compiler/src/casper/types/ConstantNode.java @@ -36,4 +36,5 @@ public boolean contains(String exp) { @Override public void getIndexes(String arrname, Map> indexes) { } + } \ No newline at end of file diff --git a/compiler/src/casper/visit/GenerateSparkCode.java b/compiler/src/casper/visit/GenerateSparkCode.java index 848215b..b7d3d97 100644 --- a/compiler/src/casper/visit/GenerateSparkCode.java +++ b/compiler/src/casper/visit/GenerateSparkCode.java @@ -79,6 +79,10 @@ public Node leave(Node old, Node n, NodeVisitor v){ template = template.replace("", inputDataName+"_"+lcName); template = template.replace(inputDataName+"["+lcName+"]", inputDataName+"_"+lcName); + for(String constVar : ext.constMapping.keySet()){ + template = template.replace(ext.constMapping.get(constVar), constVar); + } + for(Variable inVar : ext.inputVars){ if(!ext.outputVars.contains(inVar) && inVar.category != Variable.ARRAY_ACCESS) template = template.replaceAll("\\b"+inVar.varName+"\\b",inVar.varName+"_final"); @@ -171,41 +175,51 @@ private String generateCreateRDD(MyWhileExt ext) { private String generateMapEmits(MyWhileExt ext) { String emits = ""; - for(GenerateScaffold.KvPair kvp : ext.mapEmits.get("noCondition")){ - // Fix function calls - for(SketchCall call : ext.methodOperators){ - Pattern r = Pattern.compile("^("+call.name+")\\((..*)\\)$"); - Matcher m; - - m = r.matcher(kvp.key); - if(m.find()){ - System.err.println("key:" + m); + for(String cond : ext.mapEmits.keySet()){ + for(GenerateScaffold.KvPair kvp : ext.mapEmits.get(cond)){ + // Fix function calls + for(SketchCall call : ext.methodOperators){ + Pattern r = Pattern.compile("^("+call.name+")\\((..*)\\)$"); + Matcher m; + + m = r.matcher(kvp.key); + if(m.find()){ + } + + m = r.matcher(kvp.key2); + if(m.find()){ + } + + m = r.matcher(kvp.value); + if(m.find()){ + if(call.target.equals("first-arg")){ + String target = m.group(2).substring(0, m.group(2).indexOf(",")); + String args = m.group(2).substring(m.group(2).indexOf(",")+1, m.group(2).length()); + kvp.value = kvp.value.replace(m.group(0), target+"."+call.nameOrig+"("+args+")"); + } + else{ + String args = m.group(2); + kvp.value = kvp.value.replace(m.group(0), call.nameOrig+"("+args+")"); + } + } } - - m = r.matcher(kvp.key2); - if(m.find()){ - System.err.println("key2:" + m); + if(kvp.key2 == ""){ + if(cond.equals("noCondition")){ + emits += "emits.add(new Tuple2("+kvp.key+","+kvp.value+"));\n"; + } + else{ + emits += "if("+cond+") emits.add(new Tuple2("+kvp.key+","+kvp.value+"));\n"; + } } - - m = r.matcher(kvp.value); - if(m.find()){ - if(call.target.equals("first-arg")){ - String target = m.group(2).substring(0, m.group(2).indexOf(",")); - String args = m.group(2).substring(m.group(2).indexOf(",")+1, m.group(2).length()); - kvp.value = kvp.value.replace(m.group(0), target+"."+call.nameOrig+"("+args+")"); + else{ + if(cond.equals("noCondition")){ + emits += "emits.add(new Tuple2(new Tuple2("+kvp.key+","+kvp.key2+"), "+kvp.value+"));\n"; } else{ - String args = m.group(2); - kvp.value = kvp.value.replace(m.group(0), call.nameOrig+"("+args+")"); + emits += "if("+cond+") emits.add(new Tuple2(new Tuple2("+kvp.key+","+kvp.key2+"), "+kvp.value+"));\n"; } } } - if(kvp.key2 == ""){ - emits += "emits.add(new Tuple2("+kvp.key+","+kvp.value+"));\n"; - } - else{ - emits += "emits.add(new Tuple2(new Tuple2("+kvp.key+","+kvp.key2+"), "+kvp.value+"));\n"; - } } return emits; }