32 Commits

Author SHA1 Message Date
46af7125da Cleaned up unused files 2015-05-06 21:28:44 -04:00
1c68deb03e Goodbye TechComm :) 2015-05-06 21:19:34 -04:00
6f57b3eb7c discussion doneish 2015-05-06 17:04:01 -04:00
b527218cd3 REMOVED SHYAMS DUMB .PROJECT FILES. 2015-05-06 15:57:57 -04:00
0e1775fcf3 changes for consistency 2015-05-06 15:52:58 -04:00
9f4ae3633d Merge branch 'final' of github.com:aarongut/cdb into final
Conflicts:
	final/final.pdf
	final/final.tex
	final/final.tex.project.vim
2015-05-06 15:45:57 -04:00
0e04b3f27b Results finished, draft of abstract 2015-05-06 15:43:59 -04:00
63640338bb Changed Makefile to include more detail 2015-05-06 15:02:02 -04:00
6661155c32 Completed letter for final report 2015-05-06 13:17:47 -04:00
0542e022bd Bare final report 2015-05-05 10:21:07 -04:00
e24ffd6854 Added breakpoints and added LESS 2015-04-28 03:14:01 -04:00
fbf975b4ec Removed trailing whitespace and reorganized things 2015-04-24 14:45:09 -04:00
3aad88b19d Added LESS configuration and cleaned up /public 2015-04-24 01:49:13 -04:00
eb1f48ad9c Finished conio, most of string library, changed
output and bytecode to textarea
2015-04-22 00:14:46 -04:00
10f5a43a17 Added most of conio, changed bytecode and output to textareas 2015-04-21 18:17:40 -04:00
609b6e17d4 Merge branch 'post' 2015-04-21 17:37:06 -04:00
81a08cb9f8 Switched to POST request 2015-04-21 17:36:40 -04:00
f4b3c06f79 wrong branch :( 2015-04-21 17:22:54 -04:00
88b006cbcc working cc0.cgi, starting transition to POST request 2015-04-20 22:20:20 -04:00
ddf1d00f1b Merge branch 'mplamann'
Conflicts:
	public/vm/c0vm.js
2015-04-20 22:17:59 -04:00
739005289e changed because Mitchell broke things 2015-04-20 22:08:07 -04:00
62d0e37984 Merge branch 'shyam_raghavan' of github.com:aarongut/cdb into shyam_raghavan
Conflicts:
	progress_report/progress_report.dvi
	progress_report/progress_report.fdb_latexmk
	progress_report/progress_report.fls
	progress_report/progress_report.out
	progress_report/progress_report.pdf
	progress_report/progress_report.tex
	progress_report/progress_report.tex.project.vim
	progress_report/progress_report_aux
2015-04-20 20:36:50 -04:00
d0540da465 Progress Report done 2015-04-20 20:36:14 -04:00
Mitchell Plamann
349fd6ff78 Start of a breakpoints system 2015-04-19 19:48:45 -04:00
Mitchell Plamann
6138821c3a Moved non-IO callbacks to c0ffi.js 2015-04-19 19:18:49 -04:00
Mitchell Plamann
d39df5314d Fixed strings 2015-04-19 19:11:20 -04:00
e870cd5cf9 WIP - Progress Report 2015-04-14 20:38:05 -04:00
d18ccb49da Progress Report - in progress 2015-04-14 20:32:35 -04:00
ff581d8a8c Progress Report - in progress 2015-04-14 16:51:47 -04:00
d203261c64 Progress report progress section woo! 2015-04-14 16:45:34 -04:00
6e3a9b87b9 Merge branch 'run_vm'
Adds basic support for running c0 in browser
2015-04-13 23:16:06 -04:00
Mitchell Plamann
e029efcbd7 Added literature review first draft for the progress report 2015-04-13 18:55:01 -04:00
47 changed files with 1527 additions and 311 deletions

3
.gitignore vendored
View File

@@ -38,3 +38,6 @@ npm-debug.log
#vim swap files
*.swp
#WHY DO YOU INCLUDE THESE SHYAM?
*.project.vim

7
final/Makefile Normal file
View File

@@ -0,0 +1,7 @@
all: final final
letter:
pdflatex letter.tex
final:
pdflatex final.tex && pdflatex final.tex

BIN
final/final.pdf Normal file

Binary file not shown.

343
final/final.tex Executable file
View File

@@ -0,0 +1,343 @@
\documentclass[11pt]{article}
\usepackage{setspace}
\usepackage[margin=1.75in]{geometry}
% Make table of contents look better
\usepackage{tabularx}
\usepackage{tocloft}
\renewcommand{\cftsecleader}{\cftdotfill{\cftdotsep}}
\usepackage{graphicx}
\usepackage{pdfpages}
\usepackage{hyperref}
% \usepackage[ngerman]{babel}
% \usepackage[T1]{fontenc}
% \usepackage[ansinew]{inputenc}
% \usepackage{lmodern}
% Times New Roman font
\usepackage{txfonts}
\begin{document}
\setlength{\parindent}{2em}
\includepdf[pages={1}]{letter.pdf}
\begin{titlepage}
\clearpage
\thispagestyle{empty}
\begin{center}
{\Huge Final Report}\\
\vspace{10 mm}
{\Huge {\tt c0db}\\[.4em]
The {\tt C0} Debugger}\\
\vspace{10 mm}
Submitted to\\
Mr. Thomas M. Keating\\
Assistant Teaching Professor\\
School of Computer Science\\
Carnegie Mellon University\\
Pittsbugh, PA 15289
\vspace{10 mm}
Prepared by:\\
{\bf Aaron Gutierrez}\\
{\bf Shyam Raghavan}\\
Mitchell Plamann\\
Suhaas Reddy
\vspace{10 mm}
School of Computer Science\\
Carnegie Mellon University\\
\today
\vspace{10 mm}
{\bf Abstract}
\end{center}
\par
Finding problems in code is a difficult and time consuming task, one especially
difficult for programmers learning a new language. To help students more quickly
find bugs and understand how their programs run, we created an online debugger
for the {\tt C0} programming language. The {\tt C0} debugger, {\tt c0db},
enables users to run programs in their browser and break apart the execution
when they don't run correctly.
\end{titlepage}
\pagenumbering{roman}
\tableofcontents
\newpage
\pagenumbering{arabic}
\section{Introduction}
We discuss the problems we hoped to resolve, give an overview of the project,
and show how the project solves the problems outlined. We also analyze the
effectiveness of the literature reviewed and the final accomplishments compared
to our original goals.
\subsection{Background}
One of Carnegie Mellon University's most widely attended class is 15-122,
Principles of Imperative Computation. 15-122 contains a capstone assignment
called the {\tt C0} Virtual Machine, which involves implementing a program that
allows the user to run arbitrary code in the language in which 15-122 is
taught, {\tt C0}. The implementation of the virtual machine (C0VM) is not an
easy task - it involves higher level thinking and a deep understanding of the
abstractions associated with running arbitrary code.
\par
Because it is difficult, the {\tt c0db} ({\tt C0} Debugger) hoped to improve
the learning process by making visualization and interaction with a working
implementation of the C0VM more accessible to 15-122 students. This involved
creating a working Javascript version of the C0VM, implementing visualizers for
relevant parts of the assignment, and developing the interface for
student-based interaction with the application.
\par
In order to begin learning using {\tt C0}, students must
become familiar with the Unix operating system environment. This overhead
causes a delay in the learning of students, and increases the barrier to entry
for many people.
\subsection{Project Overview}
By implementing the {\tt c0db}, we hoped to benefit students in 15-122 by
helping them create correct programs. The {\tt c0db} will enable students to
understand how their programs execute and find where problems originate more
easily than with existing tools. In addition to debugging, students will have a
more familiar understanding of the underlying computational model represented
in the debugger through the use of our application.
\par
The {\tt C0} Debugger will also enable students to test simple programs with
little setup, using only a web browser. They will no longer have to set up and
become familiar with a Unix environment before they can program, making {\tt
C0} accessible to more people.
\par
The project manifested itself in what is now \url{http://c0db.herokuapp.com}.
The application provides an input field for students to enter {\tt C0} code,
outputs intermediate bytecode, and has the ability to run said bytecode. The
application also has functionality that allows for breakpoints, stepping
through code, and continuing the code from the current breakpoint. With this
application, we were able to effectively meet the goals of improving coding
accessibility, creating familiarity with the underlying computational model of
computers, and being able to more easily debug programs. We were unable to
effectively meet the goals of visualization and interactivity with respect to
the debugger and {\tt C0}.
\subsection{Analysis of Literature Review}
There was very little relevant literature to the subject at hand. The
documentation found involved implementing Javascript virtual machines and
debuggers, and while this was of some use (detailed below), the disconnect
between implementing a Javascript virtual machine and a {\tt C0} virtual
machine was apparent. This was also felt in the literature associated with
processing user-input code.
\par
The literature that was discovered during development became very helpful as
the project evolved. Of particular importance was unit testing and the original
handout given to students implementing the virtual machine in C.
\par
The greatest difficulties faced by the lack of information pertaining to
creating a virtual machine for a language that was not Javascript involved
developing the framework to parse through the intermediate bytecode given
by the compiler of {\tt C0}. The information about building an in-browser
Javascript VM and debugger\footnote{http://amasad.me/2014/01/06/building-an-in-browser-javascript-vm-and-debugger-using-generators/}
was a particular example of this. We hoped to design our debugger's architecture
based on this virtual machine's architecture. The literature mentioned being
designed in two parts. Specifically, the application was designed around a
virtual machine and a debugger. Unfortunately, because of the way {\tt C0} is
designed and the way the bytecode intermediate is evaluated, we found it very
difficult to follow this modularized approach, and had to combine the two.
\par
The second piece of literature we believed would be helpful when proposing this
project\footnote{http://www.aosabook.org/en/pjs.html} was not helpful at all.
While it did give us issues to consider such as the lack of threading and the
presence of asynchronous calls in Javascript, we felt as though it did not
provide any information about the transferral of information from the webpage
to the back-end virtual machine and debugger. This was what we hoped we would
be able to use from it, and while it was helpful in giving ideas about possible
approaches to this problem, it did not give any insight into the development of
a script to compile code and receive intermediate bytecode (the solution that
we eventually employed).
\par
The other pieces of literature we reviewed (the Node.js
documentation\footnote{http://nodejs.org/documentation/}, the Nodeunit
documentation\footnote{https://github.com/caolan/nodeunit}, and the handout
given to students to complete the {\tt C0} virtual
machine\footnote{https://www.cs.cmu.edu/~rjsimmon/15122-f14/prog/c0vm-writeup.pdf})
were all very helpful. The handout helped us design an architecture that
allowed for easy implementation in the browser and in Javascript. This
architecture was very similar to that of the architecture that students are
given when first completing the virtual machine in C. The Node.js documentation
and Nodeunit documentation proved very useful when developing the application
and creating unit tests to test the framework and the application. The
documentation provided easy answers to questions that arose with implementation.
\subsection{Successes}
The final product was successful at completing three of the four goals we set
out to accomplish. We were successful at improving accessibility of coding and
programming to students and beginners. The application allows for a simple
interface to enter code, compile it, and run it. We were successful at
creating familiarity with the underlying computation model represented in a
virtual machine. The application gives information about the current state
of the model at each point in execution, and allows the user to examine the
internals of the computational model. Finally, we were also successful at
creating a tool that allows for debugging {\tt C0} code. This is represented
in the ability of the application to step through the code.
\par
We were not successful at developing a visualization component to help
beginners learn about the computational model. This is something we hope to
be able to do and, in the future, we hope will help the students of 15-122
learn more about computer science.
\section{Approach}
In this section, we outline the various phases of our development cycle. We
also make note of the technologies used to implement the application.
\begin{figure}[h]
\includegraphics[width=\linewidth]{new-gantt}
\caption{Revised project Gantt chart}
\label{gantt}
\end{figure}
\subsection{Phase 1}
Phase 1 was centered around the design of the application, and didn't involve
very much actual programming. This phase was completed a bit later than hoped.
However, due to its short nature, it did not put us far behind our ideal
schedule. During Phase 1, we realized that the best option for architecture
of our application was to structure it similarly to the structure that students
in 15-122 use and that is provided by the course staff.
\par
While the infrastructure could have been designed in a more efficient way, we
feel as though Phase 1 was effective at creating a base layer from which to
implement both the front-end and the back-end of the application. At the end
of Phase 1, we had a framework upon which the successful web application was
developed, and we were able to coordinate and delegate tasks between team
members.
\subsection{Phase 2}
Phase 2 was focused on the back-end of the application. Phase 2 involved
actually implementing the framework described in Phase 1, developing the script
to transform uncompiled {\tt C0} code into bytecode intermediate, developing
the virtual machine in which the bytecode was executed, implementing a
state-based breakpoint system that allows for inserting breakpoints into the
code, and implementing step-based functionality that allows for users to step
through the running code.
\par
In this phase, we used the Node.js framework to implement the application. This
framework is a commonly-used web application framework in Javascript that is
used to easily get a running website. We also found Nodeunit, a unit testing
framework designed for use with the Node.js framework. Nodeunit allowed us to
write over 50 test files to check for correctness and safety of our virtual
machine.
\par
This phase finished on time after the revision of the Gantt chart (\ref{gantt}).
There are still some features that we would like to implement before declaring
the back-end finished, but these involve going further than the stated goals.
The back-end created an effective interface from which the front-end team was
able to develop the front-end.
\subsection{Phase 3}
Phase 3 was focused on the front-end of the application. Phase 3 involved
implementing the front-end side of the framework described in Phase 1. This
includes implementing the user interface for inputting {\tt C0} code, creating
the design and implementing the design for outputting the intermediate
bytecode, creating an effective medium of outputting runtime output, and
developing an interactive suite of tools for debugging such as adding
breakpoints, stepping through code, and viewing the internal computational
model.
\par
In this phase, we used LESS, a CSS preprocessor, as opposed to plain CSS. LESS
is a widely used styling language that is compiled into CSS because it is easier
to write than CSS. We also used JQuery, a front-end framework that is used to
connect elements of the front-end design to back-end Javascript. These were
chosen because they allow for fast, correct development, and make it easier
to focus on development and design, not rewriting existing code.
\par
This phase also finished on time after the revision of the Gantt chart
(\ref{gantt}). We did not quite finish all features we hoped we would be able
to complete originally. The features not completed involved more intuitive
interactivity and a better visualization tool for viewing the internals of the
computational model. The front-end, however, was successful at developing the
front-end such that most desired goals were achieved.
\subsection{Phases 4 and 5}
Phases 4 and 5 were centered around user testing and revision. These phases
are still in process, and will continue to be in process until the tool is
developed to the point at which it is used in the 15-122 course curriculum.
Phase 4 involved showing the product to the 15-122 course staff and getting
opinions from the teaching assistants that would be using the tool in a
teaching setting, showing the product to the 15-122 professors, and showing
the product to 15-122 students. Each of these groups was given an opportunity
to interact with the product, and was asked to provide feedback on usability,
learnability, and overall usefulness. Phase 5 involves revising the product
based on this feedback. Phase 4 is still in process, and as a result, Phase 5
has not begun yet.
\section{Results}
We originally aimed to evaluate our performance against user feedback from both
current and past students. However, due to setbacks in the early stages of
development we were unable to receive significant use feedback from students.
That said, we were able to gather feedback and support from current 15-122
course staff.
\par
In terms of our original vision, {\tt c0db} includes almost every feature we
planned to implement. Users can input code and either run the program straight
through or step through execution instruction by instruction. The only
significant feature that is not currently implemented completely is breakpoints.
Implementing breakpoints turned out to be significantly more difficult than we
anticipated, and given our limited time frame, we were unable to come up with an
adequate solution. We are currently working with Rob Simmons, 15-122 instructor
and maintainer for the {\tt C0} language standard, to extend the language to
support breakpoints more easily going forward.
\begin{figure}[h]
\includegraphics[width=\linewidth]{new-gantt}
\caption{Revised project Gantt chart (copied from above for convenience)}
\label{gantt}
\end{figure}
Relative to our revised Gantt Chart (Figure \ref{gantt}) we hit every milestone
on time. Both the front-end and back-end teams completed their tasks by the end
of April, at which point we transitioned everyone to user testing, revisions,
and polishing. Both teams were able to recover from the lag reported in our
progress report to complete {\tt c0db}.
\section{Discussion}
\subsection{Reflection}
Our team learned several useful skills while working on this project, ranging
from technical tricks to communication insights. For several of us, this project
represents the most collaboration on a single code base. We effectively employed
the git version control system to manage our code to lesson the work needed to
integrate each person's features. Additionally, several members of our team had
never worked with node.js or JavaScript extensively before this project.
Everyone quickly picked up the new framework and started producing useful
output.
\par
We did face some issues communicating early on, but fortunately we were able to
learn from our problems. Communicating strictly online was not sufficient and
resulted in a lack of ownership and drive that put us behind schedule early on.
We overcame our communication problems by holding brief but regular meetings
face to face to cover what has been accomplished and what tasks come next.
\subsection{Future}
{\tt C0db} is most of what we imagined, but not all. Our overall goal, to make a
tool useful for 15-122 students, may be realized in the fall, but we have more
work to ensure that we present them with the best tool possible. Before the next
semester starts we aim to complete the remaining features we originally planned
to implement: source-level breakpoints, multi-file support, and a refined
interface. If we can implement these three features, {\tt c0db} could see proper
adoption by 15-122 in the fall, where it would be used by over 300 students from
across Carnegie Mellon. If {\tt c0db} is adopted by 15-122, we would truly have
achieved the goal for our project: create a tool to better the CMU community.
\section{Sources Cited}
\begin{enumerate}
\item Amjad Masad,
``Building an In-Browser JavaScript VM and Debugger Using Generators'',
http://amasad.me/2014/01/06/building-an-in-browser-javascript-vm-and-debugger-using-generators/
\item Mike Kamermans, ``The Architecture of Open Source Applications (Volume 2)'',
http://www.aosabook.org/en/pjs.html
\item Joyent, Inc., ``Node.js Documentation'',
http://nodejs.org/documentation
\item ``Nodeunit documentation'',
https://github.com/caolan/nodeunit
\item ``c0vm Assignment Handout'',\\
https://www.cs.cmu.edu/~rjsimmon/15122-f14/prog/c0vm-writeup.pdf
\end{enumerate}
\end{document}

BIN
final/gantt.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

BIN
final/letter.pdf Executable file

Binary file not shown.

41
final/letter.tex Executable file
View File

@@ -0,0 +1,41 @@
\documentclass[11pt,stdletter,sigleft]{letter}
\usepackage{setspace}
\usepackage[margin=1.75in]{geometry}
\usepackage{txfonts}
\signature{Shyam Raghavan}
\address{5032 Forbes Ave \\ SMC 2426 \\ Pittsburgh, PA 15289}
\begin{document}
\begin{letter}{Mr. Thomas M. Keating \\
Assistant Teaching Professor \\
School of Computer Science \\
Pittsburgh, PA 15289}
\opening{Dear Mr. Keating:}
\vspace{5mm}
Included with this letter is our team's final report for the browser-based
debugger for the {\tt C0} language called {\tt c0db}, the {\tt C0} Debugger.
The purpose of the report is to update you on our progress and to explain and
discuss our results.
The report describes the problem addressed by our project, our approach to
solve it, the results we were able to achieve, our challenges and struggles,
the lessons we learned throughout the progress we made, and some
recommendations on how we or another group can continue to build on our
existing platform.
If you have any further questions or comments, please contact us at one of the
following emails: shyamsur@andrew.cmu.edu, amgutier@andrew.cmu.edu.\\
Sincerely,\\[4em]
Shyam Raghavan
\encl{project final paper for {\tt c0db}}
\end{letter}
\end{document}

BIN
final/new-gantt.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

BIN
progress_report/gannt.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

View File

@@ -0,0 +1,10 @@
# Fdb version 3
["latex"] 1429036983 "lit_review.tex" "lit_review.dvi" "lit_review" 1429036987
"/usr/local/texlive/2014/texmf-dist/web2c/texmf.cnf" 1398200874 31722 4f52421e59a4b9e910cf18e64c1f2b4a ""
"/usr/local/texlive/2014/texmf-var/web2c/pdftex/latex.fmt" 1401025988 3831950 412798929e0196806f9f91e131a01806 ""
"/usr/local/texlive/2014/texmf.cnf" 1401025936 577 a59edbde8d3a8c549d0eeaab1739e2ff ""
"lit_review.aux" 1429036983 8 a94a2480d3289e625eea47cd1b285758 ""
"lit_review.tex" 1429035932 1602 8c64955909e149f1edf1ceb643d93c17 ""
(generated)
"lit_review.dvi"
"lit_review.log"

View File

@@ -0,0 +1,6 @@
PWD /Users/shyam/Dropbox/cdb/progress_report
INPUT /usr/local/texlive/2014/texmf.cnf
INPUT /usr/local/texlive/2014/texmf-dist/web2c/texmf.cnf
INPUT /usr/local/texlive/2014/texmf-var/web2c/pdftex/latex.fmt
INPUT lit_review.tex
OUTPUT lit_review.log

26
progress_report/lit_review.tex Executable file
View File

@@ -0,0 +1,26 @@
\section{Literature Review}
Since the start of our project, we have found multiple new information sources;
the following are the most important ones.
\begin{itemize}
\item Nodeunit documentation \\
https://github.com/caolan/nodeunit \\
% It might be better to put the URLs in the "References" section and add a [\ref{}] here
We are using nodeunit to test our virtual machine. Since the c0 bytecode has
many different opcodes that it uses, it is very easy for mistakes in the virtual
machine to go unnoticed. To prevent this, we are using the nodeunit library to
write unit tests for our code. This has already helped us to find and solve
multiple bugs in the VM, and having these unit tests will make sure that we can
solve any bugs that occur as the result of future changes in the code.
\item C0vm Assignment Handout \\
https://www.cs.cmu.edu/~rjsimmon/15122-f14/prog/c0vm-writeup.pdf \\ This
document details how each opcode in the c0 bytecode language works, as well as
other important implementation details for the c0 virtual machine. It has been
an important reference while developing a JavaScript version of the c0 virtual
machine.
\end{itemize}
So far, the most important thing we have learned is that good unit tests are
vital for developing this sort of project. Without unit tests that verify each
opcode used by the virtual machine, many bugs would have gone unnoticed, causing
problems later down the line. If we only found these bugs by using the frontend,
they would have been much harder to debug, as there would have been much more
code to work through.

View File

@@ -0,0 +1 @@
\relax

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

View File

@@ -0,0 +1,10 @@
# Fdb version 3
["latex"] 1429036987 "overview.tex" "overview.dvi" "overview" 1429036988
"/usr/local/texlive/2014/texmf-dist/web2c/texmf.cnf" 1398200874 31722 4f52421e59a4b9e910cf18e64c1f2b4a ""
"/usr/local/texlive/2014/texmf-var/web2c/pdftex/latex.fmt" 1401025988 3831950 412798929e0196806f9f91e131a01806 ""
"/usr/local/texlive/2014/texmf.cnf" 1401025936 577 a59edbde8d3a8c549d0eeaab1739e2ff ""
"overview.aux" 1429036987 8 a94a2480d3289e625eea47cd1b285758 ""
"overview.tex" 1429036311 1357 cfaf2a8de5eaf66d6fce726acdb307d4 ""
(generated)
"overview.log"
"overview.dvi"

View File

@@ -0,0 +1,6 @@
PWD /Users/shyam/Dropbox/cdb/progress_report
INPUT /usr/local/texlive/2014/texmf.cnf
INPUT /usr/local/texlive/2014/texmf-dist/web2c/texmf.cnf
INPUT /usr/local/texlive/2014/texmf-var/web2c/pdftex/latex.fmt
INPUT overview.tex
OUTPUT overview.log

View File

@@ -0,0 +1,22 @@
\section{Overview}
\subsection{Purpose of the Report}
This report serves as an update to the reader on the progress the c0db team has
made on the C0 Debugger during the first month of work. The report will detail
what has been accomplished so far, what is in progress, what is planned for the
future, and any changes that will be made to the original plan of action. In
addition, the report will detail new literature that has been gathered and
used.
\subsection{Purpose of the Project}
The purpose of this project is to build a web application that can debug C0
code and can aid in a student's understanding of fundamental computational
models. This project will benefit students in 15-122 Principals of Imperative
Computation at Carnegie Mellon University by helping them create correct
programs. The C0 Debugger will enable students to understand how their programs
execute and find where problems originate more easily than with existing tools.
In addition to debugging, students will have better knowledge for how the
underlying computation model works when evaluating their code.
\par
The C0 Debugger will also enable students to test simple programs with little
setup, using only a web browser. They will no longer have to set up and become
familiar with a Unix environment before they can program, making C0 accessible
to more people, more quickly.

View File

@@ -0,0 +1,45 @@
\section{Progress}
We are nearing completion on the virtual machine upon which the debugger will
run. Moving forward, the front end team will polish the existing interface, and
expand it to control the debugger. The back end team will work on the core
functionality of the debugger and continue to fix bugs with the virtual machine.
This places us two weeks behind schedule over all, as we planned to have the
virtual machine finished by April 1\textsuperscript{st}.
\subsection*{Front End: Status}
The front end team is keeping pace with the back end team, but is still two
weeks behind schedule. We have a working interface where users can input,
compile, and run C0 programs, but there are no debugging features.
\subsection*{Front End: Projections}
We will modify our schedule to allow more time for the work on the debugger.
This time will come from a shortened user testing and revision period. That
said, because of our thorough work on the virtual machine, implementing the
debugger should progress more rapidly than originally planned. The modified
schedule is depicted in our updated Gannt chart (Figure \ref{gannt}).
\subsection*{Back End: Status}
The back end team is also two weeks behind schedule. The virtual machine, along
with most library functions needed to run programs, is complete and working
well. The team has started working on stepping through program execution, but
those features have not yet been incorporated with the rest of the application.
\subsection*{Back End: Projections}
In the coming time, the back end team will implement the remaining library
functions, then transition all of their efforts to the debugging features. Like
the front end team, this transition was originally scheduled for
April\textsuperscript{st}, but will now occur in the next week.
\includegraphics{gannt}
Our revised Gannt chart features two key changes. The back end and front end
sections were modified such that the transition of effort from the virtual
machine to the debugger aligns with where that actually happened. As a result,
the testing and revision section was push back. We are now aiming to start
testing and revision the week of April 20\textsuperscript{th}.
\subsection*{Quantification of Progress}
Currently, we have over 50 test files that we use to check for correctness of
our virtual machine. We currently pass 44 test cases, and are working to have
the rest functioning correctly soon. Once the debugger is more feature complete,
we will focus more on user feedback to assess progress.

Binary file not shown.

View File

@@ -0,0 +1,86 @@
# Fdb version 3
<<<<<<< HEAD
["latex"] 1429057416 "progress_report.tex" "progress_report.dvi" "progress_report" 1429057422
=======
["latex"] 1429044499 "progress_report.tex" "progress_report.dvi" "progress_report" 1429044577
>>>>>>> ff581d8a8ce9932bf474596368f94b00770b98d9
"/usr/local/texlive/2014/texmf-dist/fonts/map/fontname/texfonts.map" 1272929888 3287 e6b82fe08f5336d4d5ebc73fb1152e87 ""
"/usr/local/texlive/2014/texmf-dist/fonts/tfm/public/cm/cmr10.tfm" 1136768653 1296 45809c5a464d5f32c8f98ba97c1bb47f ""
"/usr/local/texlive/2014/texmf-dist/fonts/tfm/public/txfonts/txb.tfm" 1136768653 2452 76194099b4f1c022cb59f4564251c4fe ""
"/usr/local/texlive/2014/texmf-dist/fonts/tfm/public/txfonts/txr.tfm" 1136768653 2408 aec793a3c45e495f7ad15b227c91f508 ""
"/usr/local/texlive/2014/texmf-dist/fonts/tfm/public/txfonts/txsy.tfm" 1136768653 1268 1d124f224979493f8fd017a7597ea1cd ""
"/usr/local/texlive/2014/texmf-dist/tex/generic/ifxetex/ifxetex.sty" 1284331290 1458 43ab4710dc82f3edeabecd0d099626b2 ""
"/usr/local/texlive/2014/texmf-dist/tex/generic/oberdiek/atbegshi.sty" 1335995445 24460 92f559a71aac869021852c227c704b38 ""
"/usr/local/texlive/2014/texmf-dist/tex/generic/oberdiek/gettitlestring.sty" 1303254447 8237 52810bdb4db2270e717422560a104aea ""
"/usr/local/texlive/2014/texmf-dist/tex/generic/oberdiek/hobsub-generic.sty" 1338332114 189108 8b3553a56c83ff61acecb36b75d817e2 ""
"/usr/local/texlive/2014/texmf-dist/tex/generic/oberdiek/hobsub-hyperref.sty" 1338332114 70752 45fa392800e07da61fa13446ad46b34d ""
"/usr/local/texlive/2014/texmf-dist/tex/generic/oberdiek/ifpdf.sty" 1303254447 7140 ece2cc23d9f20e1f53975ac167f42d3e ""
"/usr/local/texlive/2014/texmf-dist/tex/generic/oberdiek/ifvtex.sty" 1335995445 6797 68c89f65e01894df882dd523d3fc0a8f ""
"/usr/local/texlive/2014/texmf-dist/tex/generic/oberdiek/infwarerr.sty" 1335995445 8253 3bdedc8409aa5d290a2339be6f09af03 ""
"/usr/local/texlive/2014/texmf-dist/tex/generic/oberdiek/ltxcmds.sty" 1335995445 18425 775b341047ce304520cc7c11ca41392e ""
"/usr/local/texlive/2014/texmf-dist/tex/latex/base/article.cls" 1399675188 20496 66dd832c447553f6776fbeac03bb0580 ""
"/usr/local/texlive/2014/texmf-dist/tex/latex/base/ifthen.sty" 1399675188 4947 22c4b902063e8ce2efcc2a8495ecb800 ""
"/usr/local/texlive/2014/texmf-dist/tex/latex/base/size11.clo" 1399675188 8983 e08a9a7009d9a8f8c6507333f96e336e ""
"/usr/local/texlive/2014/texmf-dist/tex/latex/eso-pic/eso-pic.sty" 1381444076 11590 2a66b78f3da61ad137452c2777f21b6b ""
"/usr/local/texlive/2014/texmf-dist/tex/latex/geometry/geometry.sty" 1284422013 40502 e003406220954b0716679d7928aedd8a ""
"/usr/local/texlive/2014/texmf-dist/tex/latex/graphics/dvips.def" 1399675188 5104 e68b64366d1946a5893a7f717264ec59 ""
"/usr/local/texlive/2014/texmf-dist/tex/latex/graphics/graphics.sty" 1254151804 14183 42a8fc761b806986eef292369afc2988 ""
"/usr/local/texlive/2014/texmf-dist/tex/latex/graphics/graphicx.sty" 1399675188 7911 bf0a64f89bfb668c239ddf6324bf4afb ""
"/usr/local/texlive/2014/texmf-dist/tex/latex/graphics/keyval.sty" 1399675188 2317 0ace13e225e9d95dd9defe947adc9fbb ""
"/usr/local/texlive/2014/texmf-dist/tex/latex/graphics/trig.sty" 1156702488 3153 c50e6bd54d2dd3933fc52bcf369bec4a ""
"/usr/local/texlive/2014/texmf-dist/tex/latex/hyperref/hdvips.def" 1352416072 3471 43fa5241d35e8bdbf02746c6d8e25fc2 ""
"/usr/local/texlive/2014/texmf-dist/tex/latex/hyperref/hyperref.sty" 1352416072 231792 5fc9dc7dd667e773a766ecc63bba7f4b ""
"/usr/local/texlive/2014/texmf-dist/tex/latex/hyperref/nameref.sty" 1351899753 12847 25b617d63258c4f72870c883493a3cf8 ""
"/usr/local/texlive/2014/texmf-dist/tex/latex/hyperref/pd1enc.def" 1352416072 14005 155ac8fad2e5dd7c2cdd130fabd96633 ""
"/usr/local/texlive/2014/texmf-dist/tex/latex/hyperref/pdfmark.def" 1352416072 49315 059e7f302e066f22f383833cd87167cb ""
"/usr/local/texlive/2014/texmf-dist/tex/latex/latexconfig/color.cfg" 1254097189 802 7b8c8d72c24d795ed7720e4dfd29bff3 ""
"/usr/local/texlive/2014/texmf-dist/tex/latex/latexconfig/graphics.cfg" 1278958963 3563 d35e897cae3b8c6848f6677b73370b54 ""
"/usr/local/texlive/2014/texmf-dist/tex/latex/latexconfig/hyperref.cfg" 1254097189 235 6031e5765137be07eed51a510b2b8fb7 ""
"/usr/local/texlive/2014/texmf-dist/tex/latex/oberdiek/auxhook.sty" 1303254447 3834 707ef09f31d7d2ea47ba89974755dfe0 ""
"/usr/local/texlive/2014/texmf-dist/tex/latex/oberdiek/kvoptions.sty" 1335995445 22417 c74ff4af6a1aa2b65d1924020edbbe11 ""
"/usr/local/texlive/2014/texmf-dist/tex/latex/oberdiek/rerunfilecheck.sty" 1303254447 9581 1158efc648bc09d5064db5703c882159 ""
"/usr/local/texlive/2014/texmf-dist/tex/latex/pdfpages/pdfpages.sty" 1377467854 51227 e7dc1f34ba805af6251ecb7986bb034f ""
"/usr/local/texlive/2014/texmf-dist/tex/latex/pdfpages/ppnull.def" 1377467854 2528 737efa41d2b4535305b16bdebc3d7d8e ""
"/usr/local/texlive/2014/texmf-dist/tex/latex/pdfpages/pppdftex.def" 1377467854 5975 e550dcf6f005a7223bb41a05edf0e99d ""
"/usr/local/texlive/2014/texmf-dist/tex/latex/setspace/setspace.sty" 1324344192 22913 a27d7908fc6f0385466454a966a316eb ""
"/usr/local/texlive/2014/texmf-dist/tex/latex/tocloft/tocloft.sty" 1367531278 34706 345df874e59e023274392bd0cf090d66 ""
"/usr/local/texlive/2014/texmf-dist/tex/latex/tools/array.sty" 1399675188 13073 a6e28ede26c83d406e124b12f368174f ""
"/usr/local/texlive/2014/texmf-dist/tex/latex/tools/calc.sty" 1399675188 10002 f32f4490d0c87a7854adf544bd459155 ""
"/usr/local/texlive/2014/texmf-dist/tex/latex/tools/tabularx.sty" 1400196978 6922 d73f54a1f22489be96930629013f1304 ""
"/usr/local/texlive/2014/texmf-dist/tex/latex/txfonts/omltxmi.fd" 1137111002 492 e7f8afe4428797548d4301de03a1b15f ""
"/usr/local/texlive/2014/texmf-dist/tex/latex/txfonts/omstxr.fd" 1137111002 857 81ff640acbcd7da3dc30601847d7e35a ""
"/usr/local/texlive/2014/texmf-dist/tex/latex/txfonts/omstxsy.fd" 1137111002 329 6ac7e19535b9f1d64e4d8e3f77dc30a3 ""
"/usr/local/texlive/2014/texmf-dist/tex/latex/txfonts/omxtxex.fd" 1137111002 312 11fe1916b0a13a81a05234a6fc7f8738 ""
"/usr/local/texlive/2014/texmf-dist/tex/latex/txfonts/ot1txr.fd" 1137111002 1271 4e3afbd8e832f2f9c7f064894e6e68e4 ""
"/usr/local/texlive/2014/texmf-dist/tex/latex/txfonts/txfonts.sty" 1206746551 50381 d367461010070c7a491b1f6979ab2062 ""
"/usr/local/texlive/2014/texmf-dist/tex/latex/txfonts/utxexa.fd" 1137111002 310 1b00b0b05685b816e4c6caccce437e0d ""
"/usr/local/texlive/2014/texmf-dist/tex/latex/url/url.sty" 1388531844 12796 8edb7d69a20b857904dd0ea757c14ec9 ""
"/usr/local/texlive/2014/texmf-dist/tex/latex/xcolor/xcolor.sty" 1169481954 55224 a43bab84e0ac5e6efcaf9a98bde73a94 ""
"/usr/local/texlive/2014/texmf-dist/web2c/texmf.cnf" 1398200874 31722 4f52421e59a4b9e910cf18e64c1f2b4a ""
"/usr/local/texlive/2014/texmf-var/web2c/pdftex/latex.fmt" 1401025988 3831950 412798929e0196806f9f91e131a01806 ""
"/usr/local/texlive/2014/texmf.cnf" 1401025936 577 a59edbde8d3a8c549d0eeaab1739e2ff ""
<<<<<<< HEAD
"old-gantt.png" 1429057390 101185 f09f139493b49efd4a4a3b3fe455d710 ""
"progress_report.aux" 1429057422 1054 1fb7c5c88c3fe5c21808963cf33f2978 ""
"progress_report.out" 1429057422 236 3411de8a1192db7b41eeb11bf4c93fef ""
"progress_report.tex" 1429057414 7263 ac2a94d16fa7d5564a6b25389d187b52 ""
"progress_report.toc" 1429057417 0 d41d8cd98f00b204e9800998ecf8427e ""
(generated)
"progress_report.aux"
"progress_report.log"
"progress_report.out"
"progress_report.toc"
"progress_report.dvi"
=======
"old-gantt.jpg" 1429044440 24493 24188bdf4f5434787c664b216e3898f2 ""
"progress_report.aux" 1429044500 1054 1fb7c5c88c3fe5c21808963cf33f2978 ""
"progress_report.out" 1429044500 236 3411de8a1192db7b41eeb11bf4c93fef ""
"progress_report.tex" 1429044508 7262 ec5dd8aff911c63e55f0b215ebc5fca1 ""
"progress_report.toc" 1429044500 0 d41d8cd98f00b204e9800998ecf8427e ""
(generated)
"progress_report.dvi"
"progress_report.out"
"progress_report.toc"
"progress_report.aux"
"progress_report.log"
>>>>>>> ff581d8a8ce9932bf474596368f94b00770b98d9

View File

@@ -0,0 +1,133 @@
PWD /Users/shyam/Dropbox/cdb/progress_report
INPUT /usr/local/texlive/2014/texmf.cnf
INPUT /usr/local/texlive/2014/texmf-dist/web2c/texmf.cnf
INPUT /usr/local/texlive/2014/texmf-var/web2c/pdftex/latex.fmt
INPUT progress_report.tex
OUTPUT progress_report.log
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/base/article.cls
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/base/article.cls
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/base/size11.clo
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/base/size11.clo
INPUT /usr/local/texlive/2014/texmf-dist/fonts/map/fontname/texfonts.map
INPUT /usr/local/texlive/2014/texmf-dist/fonts/map/fontname/texfonts.map
INPUT /usr/local/texlive/2014/texmf-dist/fonts/tfm/public/cm/cmr10.tfm
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/setspace/setspace.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/setspace/setspace.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/geometry/geometry.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/geometry/geometry.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/graphics/keyval.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/graphics/keyval.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/generic/oberdiek/ifpdf.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/generic/oberdiek/ifpdf.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/generic/oberdiek/ifvtex.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/generic/oberdiek/ifvtex.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/generic/ifxetex/ifxetex.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/generic/ifxetex/ifxetex.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/tools/tabularx.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/tools/tabularx.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/tools/array.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/tools/array.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/tocloft/tocloft.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/tocloft/tocloft.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/graphics/graphicx.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/graphics/graphicx.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/graphics/graphics.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/graphics/graphics.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/graphics/trig.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/graphics/trig.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/latexconfig/graphics.cfg
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/latexconfig/graphics.cfg
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/graphics/dvips.def
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/graphics/dvips.def
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/pdfpages/pdfpages.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/pdfpages/pdfpages.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/base/ifthen.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/base/ifthen.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/tools/calc.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/tools/calc.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/eso-pic/eso-pic.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/eso-pic/eso-pic.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/generic/oberdiek/atbegshi.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/generic/oberdiek/atbegshi.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/generic/oberdiek/infwarerr.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/generic/oberdiek/infwarerr.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/generic/oberdiek/ltxcmds.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/generic/oberdiek/ltxcmds.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/xcolor/xcolor.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/xcolor/xcolor.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/xcolor/xcolor.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/latexconfig/color.cfg
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/latexconfig/color.cfg
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/pdfpages/pppdftex.def
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/pdfpages/pppdftex.def
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/pdfpages/ppnull.def
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/pdfpages/ppnull.def
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/hyperref/hyperref.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/hyperref/hyperref.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/generic/oberdiek/hobsub-hyperref.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/generic/oberdiek/hobsub-hyperref.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/generic/oberdiek/hobsub-hyperref.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/generic/oberdiek/hobsub-generic.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/generic/oberdiek/hobsub-generic.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/oberdiek/auxhook.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/oberdiek/auxhook.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/oberdiek/kvoptions.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/oberdiek/kvoptions.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/hyperref/pd1enc.def
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/hyperref/pd1enc.def
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/latexconfig/hyperref.cfg
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/latexconfig/hyperref.cfg
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/url/url.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/url/url.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/hyperref/hdvips.def
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/hyperref/hdvips.def
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/hyperref/pdfmark.def
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/hyperref/pdfmark.def
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/oberdiek/rerunfilecheck.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/oberdiek/rerunfilecheck.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/txfonts/txfonts.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/txfonts/txfonts.sty
INPUT progress_report.aux
INPUT progress_report.aux
OUTPUT progress_report.aux
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/txfonts/omltxmi.fd
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/txfonts/omltxmi.fd
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/txfonts/omstxsy.fd
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/txfonts/omstxsy.fd
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/txfonts/omxtxex.fd
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/txfonts/omxtxex.fd
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/txfonts/utxexa.fd
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/txfonts/utxexa.fd
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/txfonts/ot1txr.fd
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/txfonts/ot1txr.fd
INPUT /usr/local/texlive/2014/texmf-dist/fonts/tfm/public/txfonts/txr.tfm
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/hyperref/nameref.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/hyperref/nameref.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/generic/oberdiek/gettitlestring.sty
INPUT /usr/local/texlive/2014/texmf-dist/tex/generic/oberdiek/gettitlestring.sty
INPUT progress_report.out
INPUT progress_report.out
INPUT progress_report.out
INPUT progress_report.out
INPUT ./progress_report.out
INPUT ./progress_report.out
OUTPUT progress_report.out
INPUT /usr/local/texlive/2014/texmf-dist/fonts/tfm/public/txfonts/txb.tfm
OUTPUT progress_report.dvi
INPUT /usr/local/texlive/2014/texmf-dist/fonts/tfm/public/txfonts/txr.tfm
INPUT /usr/local/texlive/2014/texmf-dist/fonts/tfm/public/txfonts/txb.tfm
INPUT progress_report.toc
INPUT progress_report.toc
OUTPUT progress_report.toc
INPUT /usr/local/texlive/2014/texmf-dist/fonts/tfm/public/txfonts/txr.tfm
INPUT /usr/local/texlive/2014/texmf-dist/fonts/tfm/public/txfonts/txb.tfm
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/txfonts/omstxr.fd
INPUT /usr/local/texlive/2014/texmf-dist/tex/latex/txfonts/omstxr.fd
INPUT /usr/local/texlive/2014/texmf-dist/fonts/tfm/public/txfonts/txsy.tfm
<<<<<<< HEAD
INPUT old-gantt.png
INPUT old-gantt.png
=======
INPUT old-gantt.jpg
INPUT old-gantt.jpg
>>>>>>> ff581d8a8ce9932bf474596368f94b00770b98d9

View File

@@ -0,0 +1,19 @@
\BOOKMARK [1][-]{section.1}{Overview}{}% 1
\BOOKMARK [2][-]{subsection.1.1}{Purpose of the Report}{section.1}% 2
\BOOKMARK [2][-]{subsection.1.2}{Purpose of the Project}{section.1}% 3
\BOOKMARK [1][-]{section.2}{Literature Review}{}% 4
<<<<<<< HEAD
\BOOKMARK [1][-]{section.3}{Progress}{}% 5
\BOOKMARK [2][-]{subsection.3.1}{Front End: Status}{section.3}% 6
\BOOKMARK [2][-]{subsection.3.2}{Front End: Projections}{section.3}% 7
\BOOKMARK [2][-]{subsection.3.3}{Back End: Status}{section.3}% 8
\BOOKMARK [2][-]{subsection.3.4}{Back End: Projections}{section.3}% 9
\BOOKMARK [2][-]{subsection.3.5}{Quantification of Progress}{section.3}% 10
\BOOKMARK [1][-]{section.4}{Recommendations}{}% 11
\BOOKMARK [2][-]{subsection.4.1}{Changes}{section.4}% 12
\BOOKMARK [2][-]{subsection.4.2}{New Timeline}{section.4}% 13
\BOOKMARK [2][-]{subsection.4.3}{Future Phases}{section.4}% 14
\BOOKMARK [2][-]{subsection.4.4}{Redefined Goals}{section.4}% 15
\BOOKMARK [1][-]{section.5}{Discussion}{}% 16
=======
>>>>>>> ff581d8a8ce9932bf474596368f94b00770b98d9

Binary file not shown.

View File

@@ -0,0 +1,259 @@
\documentclass[11pt]{article}
\usepackage{setspace}
\usepackage[margin=1in]{geometry}
% Make table of contents look better
\usepackage{tabularx}
\usepackage{tocloft}
\renewcommand{\cftsecleader}{\cftdotfill{\cftdotsep}}
\usepackage{graphicx}
\usepackage{pdfpages}
\usepackage{hyperref}
% \usepackage[ngerman]{babel}
% \usepackage[T1]{fontenc}
% \usepackage[ansinew]{inputenc}
% \usepackage{lmodern}
% Times New Roman font
\usepackage{txfonts}
\begin{document}
\setlength{\parindent}{2em}
\begin{titlepage}
\clearpage
\thispagestyle{empty}
\begin{center}
{\bf Technical Communication for Computer Scientists: 15-221}\\
{\bf Spring 2015}\\
\vspace{25 mm}
{\bf Progress Report:}\\
{\bf C0 Debugger}\\
\vspace{25 mm}
Aaron Gutierrez\\
Mitchell Plamann\\
Shyam Raghavan\\
Suhaas Reddy\\
\vspace{25 mm}
{\bf Submitted to}\\
Thomas M. Keating\\
Assistant Teaching Professor\\
Computer Science Department\\
School of Computer Science\\
\vspace{25 mm}
{\bf Prepared and Submitted by}\\
Shyam Raghavan - April 14, 2015
\end{center}
\end{titlepage}
\pagenumbering{roman}
\tableofcontents
\newpage
\pagenumbering{arabic}
\section{Overview}
\subsection{Purpose of the Report}
This report serves as an update to the reader on the progress the c0db team has
made on the C0 Debugger during the first month of work. The report will detail
what has been accomplished so far, what is in progress, what is planned for the
future, and any changes that will be made to the original plan of action. In
addition, the report will detail new literature that has been gathered and
used.
\subsection{Purpose of the Project}
The purpose of this project is to build a web application that can debug C0
code and can aid in a student's understanding of fundamental computational
models. This project will benefit students in 15-122 Principals of Imperative
Computation at Carnegie Mellon University by helping them create correct
programs. The C0 Debugger will enable students to understand how their programs
execute and find where problems originate more easily than with existing tools.
In addition to debugging, students will have better knowledge for how the
underlying computation model works when evaluating their code.
\par
The C0 Debugger will also enable students to test simple programs with little
setup, using only a web browser. They will no longer have to set up and become
familiar with a Unix environment before they can program, making C0 accessible
to more people, more quickly.
\section{Literature Review}
Since the start of our project, we have found multiple new information sources;
the following are the most important ones.
\begin{itemize}
\item Nodeunit documentation \\
https://github.com/caolan/nodeunit
\par
We are using nodeunit to test our virtual machine.
Since the c0 bytecode has many different opcodes that it uses, it is very
easy for mistakes in the virtual machine to go unnoticed.
To prevent this, we are using the nodeunit library to write unit tests for
our code.
This has already helped us to find and solve multiple bugs in the VM, and
having these unit tests will make sure that we can solve any bugs that
occur as the result of future changes in the code.
\item c0vm Assignment Handout \\
https://www.cs.cmu.edu/~rjsimmon/15122-f14/prog/c0vm-writeup.pdf
\par
This document details how each opcode in the c0 bytecode language works,
as well as other important implementation details for the c0 virtual
machine. It has been an important reference while developing a JavaScript
version of the c0 virtual machine.
\item Common Gateway Interface Support Documentation \\
https://docs.python.org/2/library/cgi.html
\par
This document explains the support module defined by Python 2.7.10 for
common gateway interfaces. A common gateway interface script is usually
invoked by a server to process user input submitted through an HTML
element. This piece of documentation is an important reference for
developing the flow of information from c0 code to c0 bytecode to a
working virtual machine.
\end{itemize}
So far, the most important thing we have learned is that good unit tests are
vital for developing this sort of project. Without unit tests that verify
each opcode used by the virtual machine, many bugs would have gone unnoticed,
causing problems later down the line. If we only found these bugs by using
the frontend, they would have been much harder to debug, as there would have
been much more code to work through.
\section{Progress}
<<<<<<< HEAD
\begin{figure}[h]
\centering
\includegraphics[width=\linewidth]{old-gantt.png}
\caption{Old Project Gantt Chart}
\label{fig:old-gantt}
\end{figure}
We are nearing completion on the virtual machine upon which the debugger will
run. Moving forward, the front end team will polish the existing interface, and
expand it to control the debugger. The back end team will work on the core
functionality of the debugger and continue to fix bugs with the virtual machine.
This places us two weeks behind schedule over all, as we planned to have the
virtual machine finished by April 1\textsuperscript{st}.
\subsection{Front End: Status}
The front end team is keeping pace with the back end team, but is still two
weeks behind schedule. We have a working interface where users can input,
compile, and run C0 programs, but there are no debugging features.
\subsection{Front End: Projections}
We will modify our schedule to allow more time for the work on the debugger.
This time will come from a shortened user testing and revision period. That
said, because of our thorough work on the virtual machine, implementing the
debugger should progress more rapidly than originally planned. The modified
schedule is depicted in our updated Gannt chart (Figure 2, below).
\subsection{Back End: Status}
The back end team is also two weeks behind schedule. The virtual machine, along
with most library functions needed to run programs, is complete and working
well. The team has started working on stepping through program execution, but
those features have not yet been incorporated with the rest of the application.
\subsection{Back End: Projections}
In the coming time, the back end team will implement the remaining library
functions, then transition all of their efforts to the debugging features. Like
the front end team, this transition was originally scheduled for
April\textsuperscript{st}, but will now occur in the next week.
\par
\begin{figure}[h]
\includegraphics[width=\linewidth]{new-gantt.png}
\caption{New Project Gantt Chart}
\label{fig:new-gantt}
\end{figure}
Our revised Gannt chart features two key changes. The back end and front end
sections were modified such that the transition of effort from the virtual
machine to the debugger aligns with where that actually happened. As a result,
the testing and revision section was push back. We are now aiming to start
testing and revision the week of April 20\textsuperscript{th}.
\subsection{Quantification of Progress}
Currently, we have over 50 test files that we use to check for correctness of
our virtual machine. We currently pass 44 test cases, and are working to have
the rest functioning correctly soon. Once the debugger is more feature complete,
we will focus more on user feedback to assess progress.
\section{Recommendations}
\subsection{Changes}
There are three major changes to the project plan: the frontend and backend
deadlines have moved back several days, the user testing and revisions period
have shifted back accordingly and have shortened, and the frontend goal
categories have been redefined. These changes can be identified in the above
Gantt charts by in shifts in the bars of the Gantt chart. The development bars
have increased in relative size while the testing and revising bars have shrunk.
\subsection{New Timeline}
=======
\section{Recommendations}
\begin{figure}[h]
\centering
\includegraphics[width=\linewidth]{old-gantt.jpg}
\caption{Old Project Gantt Chart}
\label{fig:old-gantt}
\end{figure}
\begin{figure}[h]
\centering
\includegraphics[width=\linewidth]{new-gantt.jpg}
\caption{New Project Gantt Chart}
\label{fig:new-gantt}
\end{figure}
There are three major changes to the project plan: the frontend and backend
deadlines have moved back several days, the user testing and revisions period
have shifted back accordingly and have shortened, the frontend goal categories
have been redefined. These changes can be identified in the above Gantt charts
by in shifts in the bars of the Gantt chart. The development bars have
increased in relative size while the testing and revising bars have shrunk.
\par
>>>>>>> ff581d8a8ce9932bf474596368f94b00770b98d9
The frontend and backend periods needed to shift backwards simply due to the
groups initial underestimation of the amount of time required to create a
reasonable product. The team believes additional development time on the
backend and frontend until the 20th of April will enable the creation of a high
quality product with a robust user interface and powerful c0 virtual machine.
Without this pushback the team currently has a working prototype with a basic
user interface and native function calls implemented, but the project has yet
to include several important features considered necessary for useful
application by students.
<<<<<<< HEAD
\subsection{Future Phases}
=======
\par
>>>>>>> ff581d8a8ce9932bf474596368f94b00770b98d9
The user testing and adjustments periods have shrunk due to the increased
development time. The team decided to avoid user testing and adjustments during
the main development phase, but due to the time pressure this caused the
testing and adjustment phases to shrink by several days each and overlap
significantly. The team hopes to consistently implement changes as students
provide feedback so that the overlap still provides time to implement
suggestions.
<<<<<<< HEAD
\subsection{Redefined Goals}
=======
\par
>>>>>>> ff581d8a8ce9932bf474596368f94b00770b98d9
The redefined goals within the frontend category reflect altered priorities of
the project as a whole. Rather than having the project work to explain topics
to the user, the project will be designed to simply run user code and step
through user code with the assumption that the user already understands how to
use the program. The instructors of 15-122 have already been informed of c0db,
so hopefully the TAs of the course could provide their students with brief
tutorials for c0db and its uses. This shift away from explanation allows the
team to focus more on providing user interface features which will more
directly aid in student code development. These features include code stepping
and highlighting as well as annotated bytecode as listed in the Gantt chart
above.
<<<<<<< HEAD
\section{Discussion}
These changes provide for a more accurate description of the timeline and the
remaining work to be accomplished before the deatline. The team believes that
this project still has a high likelihood of being completed, and this will
allow for the Fall 2015 students of 15-122 being able to better understand
and use C0. We also feel that these changes, in the long run, will lead to a
better, more polished product. While our deliverables do not change, the focus
of the product team has changed to avoid user testing and adjustments during
the development phase and consistently implement changes as students provide
feedback. In the long run, the team believes that we will accomplish the final
product in the timeline specified.
=======
>>>>>>> ff581d8a8ce9932bf474596368f94b00770b98d9
\end{document}

View File

@@ -0,0 +1,47 @@
\relax
\providecommand\hyper@newdestlabel[2]{}
\providecommand\HyperFirstAtBeginDocument{\AtBeginDocument}
\HyperFirstAtBeginDocument{\ifx\hyper@anchor\@undefined
\global\let\oldcontentsline\contentsline
\gdef\contentsline#1#2#3#4{\oldcontentsline{#1}{#2}{#3}}
\global\let\oldnewlabel\newlabel
\gdef\newlabel#1#2{\newlabelxx{#1}#2}
\gdef\newlabelxx#1#2#3#4#5#6{\oldnewlabel{#1}{{#2}{#3}}}
\AtEndDocument{\ifx\hyper@anchor\@undefined
\let\contentsline\oldcontentsline
\let\newlabel\oldnewlabel
\fi}
\fi}
\global\let\hyper@last\relax
\gdef\HyperFirstAtBeginDocument#1{#1}
<<<<<<< HEAD
\providecommand\HyField@AuxAddToFields[1]{}
\providecommand\HyField@AuxAddToCoFields[2]{}
=======
\providecommand*\HyPL@Entry[1]{}
\HyPL@Entry{0<</S/D>>}
\HyPL@Entry{1<</S/r>>}
\HyPL@Entry{2<</S/D>>}
>>>>>>> ff581d8a8ce9932bf474596368f94b00770b98d9
\@writefile{toc}{\contentsline {section}{\numberline {1}Overview}{1}{section.1}}
\@writefile{toc}{\contentsline {subsection}{\numberline {1.1}Purpose of the Report}{1}{subsection.1.1}}
\@writefile{toc}{\contentsline {subsection}{\numberline {1.2}Purpose of the Project}{1}{subsection.1.2}}
\@writefile{toc}{\contentsline {section}{\numberline {2}Literature Review}{1}{section.2}}
<<<<<<< HEAD
\@writefile{toc}{\contentsline {section}{\numberline {3}Progress}{2}{section.3}}
\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Old Project Gantt Chart}}{2}{figure.1}}
\newlabel{fig:old-gantt}{{1}{2}{Old Project Gantt Chart}{figure.1}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.1}Front End: Status}{2}{subsection.3.1}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.2}Front End: Projections}{2}{subsection.3.2}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.3}Back End: Status}{3}{subsection.3.3}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.4}Back End: Projections}{3}{subsection.3.4}}
\@writefile{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces New Project Gantt Chart}}{3}{figure.2}}
\newlabel{fig:new-gantt}{{2}{3}{New Project Gantt Chart}{figure.2}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.5}Quantification of Progress}{3}{subsection.3.5}}
\@writefile{toc}{\contentsline {section}{\numberline {4}Recommendations}{4}{section.4}}
\@writefile{toc}{\contentsline {subsection}{\numberline {4.1}Changes}{4}{subsection.4.1}}
\@writefile{toc}{\contentsline {subsection}{\numberline {4.2}New Timeline}{4}{subsection.4.2}}
\@writefile{toc}{\contentsline {subsection}{\numberline {4.3}Future Phases}{4}{subsection.4.3}}
\@writefile{toc}{\contentsline {subsection}{\numberline {4.4}Redefined Goals}{4}{subsection.4.4}}
=======
>>>>>>> ff581d8a8ce9932bf474596368f94b00770b98d9

View File

@@ -1,7 +1,22 @@
Approach
The approach section contains our methodology, how we plan to implement the project, and our project schedule, the timeline we plan to adhere to. The methodology outlines the specific tools we will use to complete the project in a timely manner whereas the schedule outlines the deadlines by which we hope to have certain tasks completed.
The approach section contains our methodology, how we plan to
implement the project, and our project schedule, the timeline we plan to adhere
to. The methodology outlines the specific tools we will use to complete the
project in a timely manner whereas the schedule outlines the deadlines by which
we hope to have certain tasks completed.
Methodology
C$_0$ Cement is a Debugger designed for the CMU teaching language, C$_0$. It will be hosted on <BLANK> with the website itself designed in CSS and HTML, using Node.js to run most of the core functionality. We will first deploy a blank template website after which half of the team wil work on parsing C0 bytecode and the other half will work on creating a meaningful user experience. Once both teams have made reasonable progress, they will combine the two units to complete the basic outline of the project.
Project Schedule
The project will be separated into five main phases: Basic Website Design, Backend implementation, Frontend Implementation, User Testing, and Revisions. The first phase should take <POSSIBLY CHANGE THIS> less than a week with the next two phases occurring simultaneously and composing the rest of the month's work. User implementation and revisions will then hopefully take up the remainder of the alloted time, with extra time padded in case implementation or revisions are more extensive than we have predicted.
C$_0$ Cement is a Debugger designed for the CMU teaching language,
C$_0$. It will be hosted on <BLANK> with the website itself designed in CSS and
HTML, using Node.js to run most of the core functionality. We will first deploy
a blank template website after which half of the team wil work on parsing C0
bytecode and the other half will work on creating a meaningful user experience.
Once both teams have made reasonable progress, they will combine the two units
to complete the basic outline of the project. Project Schedule The project
will be separated into five main phases: Basic Website Design, Backend
implementation, Frontend Implementation, User Testing, and Revisions. The first
phase should take <POSSIBLY CHANGE THIS> less than a week with the next two
phases occurring simultaneously and composing the rest of the month's work.
User implementation and revisions will then hopefully take up the remainder of
the alloted time, with extra time padded in case implementation or revisions
are more extensive than we have predicted.

28
public/css/site.css Normal file
View File

@@ -0,0 +1,28 @@
.code {
font-family: "DejaVu Sans Mono", Consolas, monospace;
width: 100%;
border-radius: 4px;
padding: 4px;
border-color: #ddd;
max-height: 300px;
overflow-y: auto;
}
.brad {
font-family: "Courier New", Courier, monospace;
font-size: 26pt;
color: #166d00;
}
.brad :hover {
text-decoration: none;
}
nav {
background-color: #d8d8d8;
}
.lbl {
font-weight: bold;
margin-bottom: 4px;
}
.btm-btn {
margin-bottom: 4px;
margin-top: -10px;
}

View File

@@ -12,12 +12,10 @@
font-family: "Courier New", Courier, monospace;
font-size: 26pt;
color: #166d00;
}
.brad:hover {
font-family: "Courier New", Courier, monospace;
font-size: 26pt;
color: #166d00;
text-decoration: none;
:hover {
text-decoration: none;
}
}
nav {
@@ -31,5 +29,8 @@ nav {
.btm-btn {
margin-bottom: 4px;
margin-top: -14px;
margin-top: -10px;
}
.no_disp {
}

View File

@@ -1,4 +1,7 @@
FILES = c0vm.js bytecode-parser.js byte-stream.js opcodes.js index.js
FILES = c0vm.js bytecode-parser.js byte-stream.js opcodes.js c0ffi.js index.js
all: $(FILES)
browserify $(FILES) -o vm.js
clean:
rm -f vm.js

View File

@@ -90,6 +90,7 @@ var Bc0File = function (filename) {
this.function_pool = [];
for (var i = 0; i < this.function_count; i++) {
this.function_pool.push(new FunctionInfo(stream));
this.function_pool[i].function_id = i;
}
this.native_count = stream.get_u2();

View File

@@ -80,31 +80,87 @@ exports.NATIVE_FILE_READLINE = 68
exports.NATIVE_IMAGE_CLONE = 69
exports.NATIVE_IMAGE_CREATE = 70
exports.NATIVE_IMAGE_DATA = 71
exports.NATIVE_IMAGE_DESTROY = 72
exports.NATIVE_IMAGE_HEIGHT = 73
exports.NATIVE_IMAGE_LOAD = 74
exports.NATIVE_IMAGE_SAVE = 75
exports.NATIVE_IMAGE_SUBIMAGE = 76
exports.NATIVE_IMAGE_WIDTH = 77
exports.NATIVE_IMAGE_HEIGHT = 72
exports.NATIVE_IMAGE_LOAD = 73
exports.NATIVE_IMAGE_SAVE = 74
exports.NATIVE_IMAGE_SUBIMAGE = 75
exports.NATIVE_IMAGE_WIDTH = 76
/* parse */
exports.NATIVE_PARSE_BOOL = 78
exports.NATIVE_PARSE_INT = 79
exports.NATIVE_INT_TOKENS = 77
exports.NATIVE_NUM_TOKENS = 78
exports.NATIVE_PARSE_BOOL = 79
exports.NATIVE_PARSE_INT = 80
exports.NATIVE_PARSE_INTS = 81
exports.NATIVE_PARSE_TOKENS = 82
/* string */
exports.NATIVE_CHAR_CHR = 80
exports.NATIVE_CHAR_ORD = 81
exports.NATIVE_STRING_CHARAT = 82
exports.NATIVE_STRING_COMPARE = 83
exports.NATIVE_STRING_EQUAL = 84
exports.NATIVE_STRING_FROM_CHARARRAY = 85
exports.NATIVE_STRING_FROMBOOL = 86
exports.NATIVE_STRING_FROMCHAR = 87
exports.NATIVE_STRING_FROMINT = 88
exports.NATIVE_STRING_JOIN = 89
exports.NATIVE_STRING_LENGTH = 90
exports.NATIVE_STRING_SUB = 91
exports.NATIVE_STRING_TERMINATED = 92
exports.NATIVE_STRING_TO_CHARARRAY = 93
exports.NATIVE_STRING_TOLOWER = 94
exports.NATIVE_CHAR_CHR = 83
exports.NATIVE_CHAR_ORD = 84
exports.NATIVE_STRING_CHARAT = 85
exports.NATIVE_STRING_COMPARE = 86
exports.NATIVE_STRING_EQUAL = 87
exports.NATIVE_STRING_FROM_CHARARRAY = 88
exports.NATIVE_STRING_FROMBOOL = 89
exports.NATIVE_STRING_FROMCHAR = 90
exports.NATIVE_STRING_FROMINT = 91
exports.NATIVE_STRING_JOIN = 92
exports.NATIVE_STRING_LENGTH = 93
exports.NATIVE_STRING_SUB = 94
exports.NATIVE_STRING_TERMINATED = 95
exports.NATIVE_STRING_TO_CHARARRAY = 96
exports.NATIVE_STRING_TOLOWER = 97
callbacks = {};
callbacks[exports.NATIVE_STRING_LENGTH] =
function(args) {
return args[0].length;
};
callbacks[exports.NATIVE_STRING_TO_CHARARRAY] =
function(args, vm) {
var address = vm.heap.length;
vm.heap.push(args[0].length+1);
vm.heap.push(1);
for (var i = 0; i < args[0].length; i++) {
vm.heap.push(args[0][i]);
}
vm.heap.push(0);
return address;
};
callbacks[exports.NATIVE_STRING_FROM_CHARARRAY] =
function(args, vm) {
var i = args[0] + 2;
var result = "";
while (vm.heap[i] !== 0) {
result += vm.heap[i];
i++;
}
return result;
};
callbacks[exports.NATIVE_CHAR_CHR] =
function(args) {
return String.fromCharCode(args[0]);
};
callbacks[exports.NATIVE_CHAR_ORD] =
function(args) {
if (typeof args[0] == "string")
return args[0].charCodeAt(0);
return args[0];
};
callbacks[exports.NATIVE_STRING_COMPARE] = function(args) {
if (args[0] < args[1]) return -1;
if (args[0] > args[1]) return 1;
return 0;
}
callbacks[exports.NATIVE_STRING_EQUAL] = function(args) {
return args[0] === args[1];
}
exports.default_callbacks = callbacks;

View File

@@ -3,9 +3,8 @@ op = require("./opcodes");
var INT_MIN = 0x80000000;
var INT_MAX = 0x7FFFFFFF;
var verbose = false;
function log(message) {
if (verbose) console.log(message);
if (verbose) $("#internals").val($("#internals").val() + "\n" + message);
}
function c0_assertion_failure(val) {
@@ -28,7 +27,6 @@ function i32_to_array(i32) {
((i32 >> 8) & 0xFF),
((i32 >> 16) & 0xFF),
((i32 >> 24) & 0xFF)];
}
function array_to_i32(array) {
@@ -43,6 +41,7 @@ var StackFrame = function(file, f) {
this.stack = [];
this.pc = 0;
this.program = f.code;
this.function_id = f.function_id;
this.variables = [];
for (var i = 0; i < f.num_vars; i++)
this.variables.push(0);
@@ -70,6 +69,8 @@ var ProgramState = function(parsed_file, callback_dict) {
}
}
this.breakpoints = [];
// Memory is just a big array of bytes, right?
// "Allocation" is appending onto this array
// A pointer to memory is an index into this array.
@@ -342,7 +343,7 @@ ProgramState.prototype.step = function() {
}
log("Calling native function with index " + index + " with arguments " +
arg_array);
this.push(native_function(arg_array));
this.push(native_function(arg_array, this));
break;
// Memory allocation operations:
@@ -471,8 +472,11 @@ ProgramState.prototype.step = function() {
}
}
// Takes in a parsed .bc0 file and runs it
function execute(file, callbacks, v) {
ProgramState.prototype.set_breakpoint = function(function_index, opcode_index) {
this.breakpoints.push([function_index, opcode_index]);
}
function initialize_vm(file, callbacks, v) {
verbose = typeof v !== 'undefined' ? v : true;
log("Initializing with file " + file);
@@ -482,25 +486,50 @@ function execute(file, callbacks, v) {
log("Beginning execution");
return state;
}
function run_vm(vm) {
while (true) {
var val = state.step();
if (val !== undefined) return val;
for (breakpoint in vm.breakpoints) {
if (vm.frame.function_id == breakpoint[0] &&
vm.frame.pc == breakpoint[1]) {
console.log("Breakpoint reached!");
return vm;
}
}
var val = vm.step();
if (val !== undefined) return vm;
if (verbose) {
console.log("Machine state:");
console.log("Machine vm:");
console.log(" Current Stack Frame:");
console.log(" Stack: " + state.frame.stack);
console.log(" PC: " + state.frame.pc);
console.log(" Vars: " + state.frame.variables);
// console.log(" Code: " + state.frame.program);
console.log(" Heap: " + state.heap);
console.log(" Stack: " + vm.frame.stack);
console.log(" PC: " + vm.frame.pc);
console.log(" Vars: " + vm.frame.variables);
// console.log(" Code: " + vm.frame.program);
console.log(" Heap: " + vm.heap);
}
}
}
// if (at_breakpoint) {
// save state (maybe in a global in this file?)
// return;
// }
}
// Takes in a parsed .bc0 file and runs it
function execute(file, callbacks, v) {
var state = initialize_vm(file, callbacks, v);
return run_vm(state);
}
function push(v) {
console.log("Pretend I pushed " + v);
}
exports.execute = execute;
exports.initialize_vm = initialize_vm;
exports.run_vm = run_vm;
exports.push = push;

View File

@@ -2,38 +2,68 @@ parser = require("./bytecode-parser");
c0vm = require("./c0vm.js");
c0ffi = require("./c0ffi.js");
// console.log("Reading in sample bytecode file:");
// console.log(parser.getBytes("../test/test.bc0"));
// console.log("That was the sample bytecode file" +
// " -- it probably took up your whole terminal screen.");
// var file = parser.parse("../test/test.bc0");
// console.log(file);
// console.log(file.function_pool[0].code);
// UI interaction functions
function print(arg) {
$("#output").append(arg);
$("#output").val($("#output").val() + arg);
}
callbacks = {};
callbacks[c0ffi.NATIVE_PRINT] = function(args) {
print(args[0]);
print("<br />");
return 0;
}
callbacks = c0ffi.default_callbacks;
callbacks[c0ffi.NATIVE_PRINTINT] = function(args) {
print(args[0]);
print("<br />");
return 0;
}
// conio
callbacks[c0ffi.NATIVE_PRINT] = function(args) {
print(args[0]);
return 0;
}
callbacks[c0ffi.NATIVE_PRINTLN] = function(args) {
print(args[0]);
print("\n");
}
callbacks[c0ffi.NATIVE_PRINTBOOL] = function(args) {
if (args[0])
print("false");
else
print("true");
}
callbacks[c0ffi.NATIVE_PRINTCHAR] = function(args) {
print(String.fromCharCode(args[0]));
}
callbacks[c0ffi.NATIVE_READLINE] = function(args) {
return prompt("","");
}
callbacks[c0ffi.NATIVE_PRINTINT] = function(args) {
print(args[0]);
}
console.log(callbacks);
console.log(callbacks);
$("#run").click(function() {
var input = $("#bytecode").html().replace(/(\r\n|\n|\r)/gm,"");
var file = parser.parse($("#bytecode").text());
print("<br />");
print(c0vm.execute(file, callbacks));
var input = $("#bytecode").val().replace(/(\r\n|\n|\r)/gm,"");
$("#output").val("");
var file = parser.parse($("#bytecode").val());
state = c0vm.execute(file, callbacks, true);
state = c0vm.initialize_vm(file, callbacks, true);
});
$("#break").click(function() {
var input = $("#breakpoints").val().replace(/(\r\n|\n|\r)/gm,"");
var temp = input.split(",");
for (a in temp) {
temp2 = temp[a].split(" ");
state.set_breakpoint(parseInt(temp2[0], 10), parseInt(temp2[1], 10));
}
$("#output").val("");
$("#breakpoints").val("");
$("#internals").val("");
});
$("#continue").click(function () {
c0vm.run_vm(state);
});
$("#step").click(function () {
state.step();
});

View File

@@ -131,6 +131,7 @@ var Bc0File = function (filename) {
this.function_pool = [];
for (var i = 0; i < this.function_count; i++) {
this.function_pool.push(new FunctionInfo(stream));
this.function_pool[i].function_id = i;
}
this.native_count = stream.get_u2();
@@ -239,34 +240,90 @@ exports.NATIVE_FILE_READLINE = 68
exports.NATIVE_IMAGE_CLONE = 69
exports.NATIVE_IMAGE_CREATE = 70
exports.NATIVE_IMAGE_DATA = 71
exports.NATIVE_IMAGE_DESTROY = 72
exports.NATIVE_IMAGE_HEIGHT = 73
exports.NATIVE_IMAGE_LOAD = 74
exports.NATIVE_IMAGE_SAVE = 75
exports.NATIVE_IMAGE_SUBIMAGE = 76
exports.NATIVE_IMAGE_WIDTH = 77
exports.NATIVE_IMAGE_HEIGHT = 72
exports.NATIVE_IMAGE_LOAD = 73
exports.NATIVE_IMAGE_SAVE = 74
exports.NATIVE_IMAGE_SUBIMAGE = 75
exports.NATIVE_IMAGE_WIDTH = 76
/* parse */
exports.NATIVE_PARSE_BOOL = 78
exports.NATIVE_PARSE_INT = 79
exports.NATIVE_INT_TOKENS = 77
exports.NATIVE_NUM_TOKENS = 78
exports.NATIVE_PARSE_BOOL = 79
exports.NATIVE_PARSE_INT = 80
exports.NATIVE_PARSE_INTS = 81
exports.NATIVE_PARSE_TOKENS = 82
/* string */
exports.NATIVE_CHAR_CHR = 80
exports.NATIVE_CHAR_ORD = 81
exports.NATIVE_STRING_CHARAT = 82
exports.NATIVE_STRING_COMPARE = 83
exports.NATIVE_STRING_EQUAL = 84
exports.NATIVE_STRING_FROM_CHARARRAY = 85
exports.NATIVE_STRING_FROMBOOL = 86
exports.NATIVE_STRING_FROMCHAR = 87
exports.NATIVE_STRING_FROMINT = 88
exports.NATIVE_STRING_JOIN = 89
exports.NATIVE_STRING_LENGTH = 90
exports.NATIVE_STRING_SUB = 91
exports.NATIVE_STRING_TERMINATED = 92
exports.NATIVE_STRING_TO_CHARARRAY = 93
exports.NATIVE_STRING_TOLOWER = 94
exports.NATIVE_CHAR_CHR = 83
exports.NATIVE_CHAR_ORD = 84
exports.NATIVE_STRING_CHARAT = 85
exports.NATIVE_STRING_COMPARE = 86
exports.NATIVE_STRING_EQUAL = 87
exports.NATIVE_STRING_FROM_CHARARRAY = 88
exports.NATIVE_STRING_FROMBOOL = 89
exports.NATIVE_STRING_FROMCHAR = 90
exports.NATIVE_STRING_FROMINT = 91
exports.NATIVE_STRING_JOIN = 92
exports.NATIVE_STRING_LENGTH = 93
exports.NATIVE_STRING_SUB = 94
exports.NATIVE_STRING_TERMINATED = 95
exports.NATIVE_STRING_TO_CHARARRAY = 96
exports.NATIVE_STRING_TOLOWER = 97
callbacks = {};
callbacks[exports.NATIVE_STRING_LENGTH] =
function(args) {
return args[0].length;
};
callbacks[exports.NATIVE_STRING_TO_CHARARRAY] =
function(args, vm) {
var address = vm.heap.length;
vm.heap.push(args[0].length+1);
vm.heap.push(1);
for (var i = 0; i < args[0].length; i++) {
vm.heap.push(args[0][i]);
}
vm.heap.push(0);
return address;
};
callbacks[exports.NATIVE_STRING_FROM_CHARARRAY] =
function(args, vm) {
var i = args[0] + 2;
var result = "";
while (vm.heap[i] !== 0) {
result += vm.heap[i];
i++;
}
return result;
};
callbacks[exports.NATIVE_CHAR_CHR] =
function(args) {
return String.fromCharCode(args[0]);
};
callbacks[exports.NATIVE_CHAR_ORD] =
function(args) {
if (typeof args[0] == "string")
return args[0].charCodeAt(0);
return args[0];
};
callbacks[exports.NATIVE_STRING_COMPARE] = function(args) {
if (args[0] < args[1]) return -1;
if (args[0] > args[1]) return 1;
return 0;
}
callbacks[exports.NATIVE_STRING_EQUAL] = function(args) {
return args[0] === args[1];
}
exports.default_callbacks = callbacks;
},{}],4:[function(require,module,exports){
op = require("./opcodes");
@@ -274,9 +331,8 @@ op = require("./opcodes");
var INT_MIN = 0x80000000;
var INT_MAX = 0x7FFFFFFF;
var verbose = false;
function log(message) {
if (verbose) console.log(message);
if (verbose) $("#internals").val($("#internals").val() + "\n" + message);
}
function c0_assertion_failure(val) {
@@ -299,7 +355,6 @@ function i32_to_array(i32) {
((i32 >> 8) & 0xFF),
((i32 >> 16) & 0xFF),
((i32 >> 24) & 0xFF)];
}
function array_to_i32(array) {
@@ -314,6 +369,7 @@ var StackFrame = function(file, f) {
this.stack = [];
this.pc = 0;
this.program = f.code;
this.function_id = f.function_id;
this.variables = [];
for (var i = 0; i < f.num_vars; i++)
this.variables.push(0);
@@ -341,6 +397,8 @@ var ProgramState = function(parsed_file, callback_dict) {
}
}
this.breakpoints = [];
// Memory is just a big array of bytes, right?
// "Allocation" is appending onto this array
// A pointer to memory is an index into this array.
@@ -613,7 +671,7 @@ ProgramState.prototype.step = function() {
}
log("Calling native function with index " + index + " with arguments " +
arg_array);
this.push(native_function(arg_array));
this.push(native_function(arg_array, this));
break;
// Memory allocation operations:
@@ -742,8 +800,11 @@ ProgramState.prototype.step = function() {
}
}
// Takes in a parsed .bc0 file and runs it
function execute(file, callbacks, v) {
ProgramState.prototype.set_breakpoint = function(function_index, opcode_index) {
this.breakpoints.push([function_index, opcode_index]);
}
function initialize_vm(file, callbacks, v) {
verbose = typeof v !== 'undefined' ? v : true;
log("Initializing with file " + file);
@@ -753,68 +814,123 @@ function execute(file, callbacks, v) {
log("Beginning execution");
return state;
}
function run_vm(vm) {
while (true) {
var val = state.step();
if (val !== undefined) return val;
for (breakpoint in vm.breakpoints) {
if (vm.frame.function_id == breakpoint[0] &&
vm.frame.pc == breakpoint[1]) {
console.log("Breakpoint reached!");
return vm;
}
}
var val = vm.step();
if (val !== undefined) return vm;
if (verbose) {
console.log("Machine state:");
console.log("Machine vm:");
console.log(" Current Stack Frame:");
console.log(" Stack: " + state.frame.stack);
console.log(" PC: " + state.frame.pc);
console.log(" Vars: " + state.frame.variables);
// console.log(" Code: " + state.frame.program);
console.log(" Heap: " + state.heap);
console.log(" Stack: " + vm.frame.stack);
console.log(" PC: " + vm.frame.pc);
console.log(" Vars: " + vm.frame.variables);
// console.log(" Code: " + vm.frame.program);
console.log(" Heap: " + vm.heap);
}
}
}
// if (at_breakpoint) {
// save state (maybe in a global in this file?)
// return;
// }
}
// Takes in a parsed .bc0 file and runs it
function execute(file, callbacks, v) {
var state = initialize_vm(file, callbacks, v);
return run_vm(state);
}
function push(v) {
console.log("Pretend I pushed " + v);
}
exports.execute = execute;
exports.initialize_vm = initialize_vm;
exports.run_vm = run_vm;
exports.push = push;
},{"./opcodes":6}],5:[function(require,module,exports){
parser = require("./bytecode-parser");
c0vm = require("./c0vm.js");
c0ffi = require("./c0ffi.js");
// console.log("Reading in sample bytecode file:");
// console.log(parser.getBytes("../test/test.bc0"));
// console.log("That was the sample bytecode file" +
// " -- it probably took up your whole terminal screen.");
// var file = parser.parse("../test/test.bc0");
// console.log(file);
// console.log(file.function_pool[0].code);
// UI interaction functions
function print(arg) {
$("#output").append(arg);
$("#output").val($("#output").val() + arg);
}
callbacks = {};
callbacks[c0ffi.NATIVE_PRINT] = function(args) {
print(args[0]);
print("<br />");
return 0;
}
callbacks = c0ffi.default_callbacks;
callbacks[c0ffi.NATIVE_PRINTINT] = function(args) {
print(args[0]);
print("<br />");
return 0;
}
// conio
callbacks[c0ffi.NATIVE_PRINT] = function(args) {
print(args[0]);
return 0;
}
callbacks[c0ffi.NATIVE_PRINTLN] = function(args) {
print(args[0]);
print("\n");
}
callbacks[c0ffi.NATIVE_PRINTBOOL] = function(args) {
if (args[0])
print("false");
else
print("true");
}
callbacks[c0ffi.NATIVE_PRINTCHAR] = function(args) {
print(String.fromCharCode(args[0]));
}
callbacks[c0ffi.NATIVE_READLINE] = function(args) {
return prompt("","");
}
callbacks[c0ffi.NATIVE_PRINTINT] = function(args) {
print(args[0]);
}
console.log(callbacks);
console.log(callbacks);
$("#run").click(function() {
var input = $("#bytecode").html().replace(/(\r\n|\n|\r)/gm,"");
var file = parser.parse($("#bytecode").text());
print("<br />");
print(c0vm.execute(file, callbacks));
var input = $("#bytecode").val().replace(/(\r\n|\n|\r)/gm,"");
$("#output").val("");
var file = parser.parse($("#bytecode").val());
state = c0vm.execute(file, callbacks, true);
state = c0vm.initialize_vm(file, callbacks, true);
});
$("#break").click(function() {
var input = $("#breakpoints").val().replace(/(\r\n|\n|\r)/gm,"");
var temp = input.split(",");
for (a in temp) {
temp2 = temp[a].split(" ");
state.set_breakpoint(parseInt(temp2[0], 10), parseInt(temp2[1], 10));
}
$("#output").val("");
$("#breakpoints").val("");
$("#internals").val("");
});
$("#continue").click(function () {
c0vm.run_vm(state);
});
$("#step").click(function () {
state.step();
});
},{"./bytecode-parser":2,"./c0ffi.js":3,"./c0vm.js":4}],6:[function(require,module,exports){
@@ -926,4 +1042,4 @@ exports.lookup_table = {
},{}],7:[function(require,module,exports){
},{}]},{},[4,2,1,6,5]);
},{}]},{},[4,2,1,6,3,5]);

View File

@@ -1,110 +0,0 @@
exports.NATIVE_FADD = 0
exports.NATIVE_FDIV = 1
exports.NATIVE_FLESS = 2
exports.NATIVE_FMUL = 3
exports.NATIVE_FSUB = 4
exports.NATIVE_FTOI = 5
exports.NATIVE_ITOF = 6
exports.NATIVE_PRINT_FPT = 7
exports.NATIVE_PRINT_HEX = 8
exports.NATIVE_PRINT_INT = 9
/* args */
exports.NATIVE_ARGS_FLAG = 10
exports.NATIVE_ARGS_INT = 11
exports.NATIVE_ARGS_PARSE = 12
exports.NATIVE_ARGS_STRING = 13
/* conio */
exports.NATIVE_EOF = 14
exports.NATIVE_FLUSH = 15
exports.NATIVE_PRINT = 16
exports.NATIVE_PRINTBOOL = 17
exports.NATIVE_PRINTCHAR = 18
exports.NATIVE_PRINTINT = 19
exports.NATIVE_PRINTLN = 20
exports.NATIVE_READLINE = 21
/* curses */
exports.NATIVE_C_ADDCH = 22
exports.NATIVE_C_CBREAK = 23
exports.NATIVE_C_CURS_SET = 24
exports.NATIVE_C_DELCH = 25
exports.NATIVE_C_ENDWIN = 26
exports.NATIVE_C_ERASE = 27
exports.NATIVE_C_GETCH = 28
exports.NATIVE_C_INITSCR = 29
exports.NATIVE_C_KEYPAD = 30
exports.NATIVE_C_MOVE = 31
exports.NATIVE_C_NOECHO = 32
exports.NATIVE_C_REFRESH = 33
exports.NATIVE_C_SUBWIN = 34
exports.NATIVE_C_WADDCH = 35
exports.NATIVE_C_WADDSTR = 36
exports.NATIVE_C_WCLEAR = 37
exports.NATIVE_C_WERASE = 38
exports.NATIVE_C_WMOVE = 39
exports.NATIVE_C_WREFRESH = 40
exports.NATIVE_C_WSTANDEND = 41
exports.NATIVE_C_WSTANDOUT = 42
exports.NATIVE_CC_GETBEGX = 43
exports.NATIVE_CC_GETBEGY = 44
exports.NATIVE_CC_GETMAXX = 45
exports.NATIVE_CC_GETMAXY = 46
exports.NATIVE_CC_GETX = 47
exports.NATIVE_CC_GETY = 48
exports.NATIVE_CC_HIGHLIGHT = 49
exports.NATIVE_CC_KEY_IS_BACKSPACE = 50
exports.NATIVE_CC_KEY_IS_DOWN = 51
exports.NATIVE_CC_KEY_IS_ENTER = 52
exports.NATIVE_CC_KEY_IS_LEFT = 53
exports.NATIVE_CC_KEY_IS_RIGHT = 54
exports.NATIVE_CC_KEY_IS_UP = 55
exports.NATIVE_CC_WBOLDOFF = 56
exports.NATIVE_CC_WBOLDON = 57
exports.NATIVE_CC_WDIMOFF = 58
exports.NATIVE_CC_WDIMON = 59
exports.NATIVE_CC_WREVERSEOFF = 60
exports.NATIVE_CC_WREVERSEON = 61
exports.NATIVE_CC_WUNDEROFF = 62
exports.NATIVE_CC_WUNDERON = 63
/* file */
exports.NATIVE_FILE_CLOSE = 64
exports.NATIVE_FILE_CLOSED = 65
exports.NATIVE_FILE_EOF = 66
exports.NATIVE_FILE_READ = 67
exports.NATIVE_FILE_READLINE = 68
/* img */
exports.NATIVE_IMAGE_CLONE = 69
exports.NATIVE_IMAGE_CREATE = 70
exports.NATIVE_IMAGE_DATA = 71
exports.NATIVE_IMAGE_DESTROY = 72
exports.NATIVE_IMAGE_HEIGHT = 73
exports.NATIVE_IMAGE_LOAD = 74
exports.NATIVE_IMAGE_SAVE = 75
exports.NATIVE_IMAGE_SUBIMAGE = 76
exports.NATIVE_IMAGE_WIDTH = 77
/* parse */
exports.NATIVE_PARSE_BOOL = 78
exports.NATIVE_PARSE_INT = 79
/* string */
exports.NATIVE_CHAR_CHR = 80
exports.NATIVE_CHAR_ORD = 81
exports.NATIVE_STRING_CHARAT = 82
exports.NATIVE_STRING_COMPARE = 83
exports.NATIVE_STRING_EQUAL = 84
exports.NATIVE_STRING_FROM_CHARARRAY = 85
exports.NATIVE_STRING_FROMBOOL = 86
exports.NATIVE_STRING_FROMCHAR = 87
exports.NATIVE_STRING_FROMINT = 88
exports.NATIVE_STRING_JOIN = 89
exports.NATIVE_STRING_LENGTH = 90
exports.NATIVE_STRING_SUB = 91
exports.NATIVE_STRING_TERMINATED = 92
exports.NATIVE_STRING_TO_CHARARRAY = 93
exports.NATIVE_STRING_TOLOWER = 94

View File

@@ -2,7 +2,8 @@ parser = require("../src/bytecode-parser.js");
c0vm = require("../src/c0vm.js");
c0ffi = require("../src/c0ffi.js");
var callbacks = {}
var callbacks = c0ffi.default_callbacks;
console.log("Initial callbacks: " + callbacks[c0ffi.NATIVE_STRING_LENGTH](["hi"]));
var printout = "";
callbacks[c0ffi.NATIVE_PRINT] = function(args) {
@@ -20,30 +21,6 @@ callbacks[c0ffi.NATIVE_PRINTLN] = function(args) {
return 0;
}
callbacks[c0ffi.NATIVE_STRING_LENGTH] = function(args) {
return args[0].length;
}
callbacks[c0ffi.NATIVE_STRING_TO_CHARARRAY] = function(args) {
return args[0];
}
callbacks[c0ffi.NATIVE_STRING_FROM_CHARARRAY] = function(args) {
console.log("string_from_chararray: " + args);
return args[0];
}
callbacks[c0ffi.NATIVE_CHAR_CHR] = function(args) {
return String.fromCharCode(args[0]);
}
callbacks[c0ffi.NATIVE_CHAR_ORD] = function(args) {
console.log("native_car_ord: " + args);
if (typeof args[0] == "string")
return args[0].charCodeAt(0);
return args[0];
}
function doTest(filename, expected_result) {
return function(test) {
var result = c0vm.execute(parser.parse(filename), callbacks, false);

View File

@@ -5,9 +5,7 @@ html
link(rel="stylesheet"
href="//netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap.min.css")
link(rel="stylesheet" href="/site.css")
link(rel="stylesheet" href="sh_emacs.min.css")
link(rel="stylesheet" href="/css/site.css")
block head

View File

@@ -3,9 +3,6 @@ extends base
block head
title c0db
link(rel="stylesheet" href="/codemirror.css")
block nav
+navbar("home")
@@ -19,23 +16,35 @@ block body
button(onclick="compile()" type="button").btn.btn-default.btm-btn.pull-right Compile
#codearea
textarea.code.formControl.sh_c(rows="12" id="inputCode")
.col-md-6
p.lbl.
Bytecode
pre#bytecode.panel.panel-default.code.sh_c.
&nbsp;
form
.form-group
label(for="bytecode") Bytecode
button(type="button")#run.btn.btn-default.btm-btn.pull-right Run
textarea.code.formControl.sh_c(rows="12" id="bytecode")
.row
.col-md-12
p.lbl.
Output
button(type="button")#run.btn.btn-default.btm-btn.pull-right Run
pre#output.panel.panel-default.code
&nbsp;
.col-md-3
form
.form-group
label(for="output") Output
button(type="button")#continue.no_disp.btn.btn-default.btm-btn.pull-right Continue
button(type="button")#step.no_disp.btn.btn-default.btm-btn.pull-right Step
textarea.code.sh_c(id="output")
.col-md-6
form
.form-group
label(for="internals") Stack Output
button(type="button")#download.btn.btn-default.btm-btn.pull-right Download
textarea.code.sh_c(rows="12" id="internals")
.col-md-3
form
.form-group
label(for="breakpoints") Breakpoints
button(type="button")#break.btn.btn-default.btm-btn.pull-right Save
textarea.code.sh_c(id="breakpoints")
block script
script(type="text/javascript" src="codemirror-compressed.js")
script(type="text/javascript" src="js/codemirror-compressed.js")
script(type="text/javascript" src="vm/vm.js")
script(type='text/javascript').
@@ -47,15 +56,14 @@ block script
function compile() {
var code = encodeURIComponent($("#inputCode").val());
$.ajax({
type: "POST",
async: true,
url: "http://www.contrib.andrew.cmu.edu/~amgutier/cc0.cgi",
dataType: "jsonp",
dataType: "json",
data: {
data: code
},
jsonpCallback: "callback"
success: callback
});
}