Compare commits
32 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 46af7125da | |||
| 1c68deb03e | |||
| 6f57b3eb7c | |||
| b527218cd3 | |||
| 0e1775fcf3 | |||
| 9f4ae3633d | |||
| 0e04b3f27b | |||
| 63640338bb | |||
| 6661155c32 | |||
| 0542e022bd | |||
| e24ffd6854 | |||
| fbf975b4ec | |||
| 3aad88b19d | |||
| eb1f48ad9c | |||
| 10f5a43a17 | |||
| 609b6e17d4 | |||
| 81a08cb9f8 | |||
| f4b3c06f79 | |||
| 88b006cbcc | |||
| ddf1d00f1b | |||
| 739005289e | |||
| 62d0e37984 | |||
| d0540da465 | |||
|
|
349fd6ff78 | ||
|
|
6138821c3a | ||
|
|
d39df5314d | ||
| e870cd5cf9 | |||
| d18ccb49da | |||
| ff581d8a8c | |||
| d203261c64 | |||
| 6e3a9b87b9 | |||
|
|
e029efcbd7 |
3
.gitignore
vendored
3
.gitignore
vendored
@@ -38,3 +38,6 @@ npm-debug.log
|
||||
|
||||
#vim swap files
|
||||
*.swp
|
||||
|
||||
#WHY DO YOU INCLUDE THESE SHYAM?
|
||||
*.project.vim
|
||||
|
||||
7
final/Makefile
Normal file
7
final/Makefile
Normal 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
BIN
final/final.pdf
Normal file
Binary file not shown.
343
final/final.tex
Executable file
343
final/final.tex
Executable 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
BIN
final/gantt.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 48 KiB |
BIN
final/letter.pdf
Executable file
BIN
final/letter.pdf
Executable file
Binary file not shown.
41
final/letter.tex
Executable file
41
final/letter.tex
Executable 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
BIN
final/new-gantt.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 100 KiB |
BIN
progress_report/gannt.jpg
Normal file
BIN
progress_report/gannt.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 31 KiB |
10
progress_report/lit_review.fdb_latexmk
Normal file
10
progress_report/lit_review.fdb_latexmk
Normal 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"
|
||||
6
progress_report/lit_review.fls
Normal file
6
progress_report/lit_review.fls
Normal 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
26
progress_report/lit_review.tex
Executable 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.
|
||||
1
progress_report/lit_review_aux
Normal file
1
progress_report/lit_review_aux
Normal file
@@ -0,0 +1 @@
|
||||
\relax
|
||||
BIN
progress_report/new-gantt.png
Normal file
BIN
progress_report/new-gantt.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 100 KiB |
BIN
progress_report/old-gantt.jpg
Normal file
BIN
progress_report/old-gantt.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 24 KiB |
BIN
progress_report/old-gantt.png
Normal file
BIN
progress_report/old-gantt.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 99 KiB |
10
progress_report/overview.fdb_latexmk
Normal file
10
progress_report/overview.fdb_latexmk
Normal 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"
|
||||
6
progress_report/overview.fls
Normal file
6
progress_report/overview.fls
Normal 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
|
||||
22
progress_report/overview.tex
Normal file
22
progress_report/overview.tex
Normal 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.
|
||||
45
progress_report/progress.tex
Normal file
45
progress_report/progress.tex
Normal 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.
|
||||
BIN
progress_report/progress_report.dvi
Normal file
BIN
progress_report/progress_report.dvi
Normal file
Binary file not shown.
86
progress_report/progress_report.fdb_latexmk
Normal file
86
progress_report/progress_report.fdb_latexmk
Normal 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
|
||||
133
progress_report/progress_report.fls
Normal file
133
progress_report/progress_report.fls
Normal 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
|
||||
19
progress_report/progress_report.out
Normal file
19
progress_report/progress_report.out
Normal 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
|
||||
BIN
progress_report/progress_report.pdf
Normal file
BIN
progress_report/progress_report.pdf
Normal file
Binary file not shown.
259
progress_report/progress_report.tex
Normal file
259
progress_report/progress_report.tex
Normal 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
|
||||
group’s 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}
|
||||
47
progress_report/progress_report_aux
Normal file
47
progress_report/progress_report_aux
Normal 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
|
||||
@@ -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
28
public/css/site.css
Normal 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;
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
|
||||
nav {
|
||||
@@ -31,5 +29,8 @@ nav {
|
||||
|
||||
.btm-btn {
|
||||
margin-bottom: 4px;
|
||||
margin-top: -14px;
|
||||
margin-top: -10px;
|
||||
}
|
||||
|
||||
.no_disp {
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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) {
|
||||
callbacks = c0ffi.default_callbacks;
|
||||
|
||||
// conio
|
||||
callbacks[c0ffi.NATIVE_PRINT] = function(args) {
|
||||
print(args[0]);
|
||||
print("<br />");
|
||||
return 0;
|
||||
}
|
||||
|
||||
callbacks[c0ffi.NATIVE_PRINTINT] = function(args) {
|
||||
}
|
||||
callbacks[c0ffi.NATIVE_PRINTLN] = function(args) {
|
||||
print(args[0]);
|
||||
print("<br />");
|
||||
return 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();
|
||||
});
|
||||
|
||||
240
public/vm/vm.js
240
public/vm/vm.js
@@ -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) {
|
||||
callbacks = c0ffi.default_callbacks;
|
||||
|
||||
// conio
|
||||
callbacks[c0ffi.NATIVE_PRINT] = function(args) {
|
||||
print(args[0]);
|
||||
print("<br />");
|
||||
return 0;
|
||||
}
|
||||
|
||||
callbacks[c0ffi.NATIVE_PRINTINT] = function(args) {
|
||||
}
|
||||
callbacks[c0ffi.NATIVE_PRINTLN] = function(args) {
|
||||
print(args[0]);
|
||||
print("<br />");
|
||||
return 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]);
|
||||
|
||||
110
src/c0ffi.js
110
src/c0ffi.js
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
.row
|
||||
.col-md-12
|
||||
p.lbl.
|
||||
Output
|
||||
form
|
||||
.form-group
|
||||
label(for="bytecode") Bytecode
|
||||
button(type="button")#run.btn.btn-default.btm-btn.pull-right Run
|
||||
pre#output.panel.panel-default.code
|
||||
|
||||
|
||||
textarea.code.formControl.sh_c(rows="12" id="bytecode")
|
||||
.row
|
||||
.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
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user