Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
J
jsexplain
Manage
Activity
Members
Code
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Model registry
Operate
Environments
Analyze
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Verified Software
jsexplain
Commits
35a54abc
Commit
35a54abc
authored
9 years ago
by
charguer
Browse files
Options
Downloads
Patches
Plain Diff
todo_file
parent
e71cbc16
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
generator/TODO
+107
-56
107 additions, 56 deletions
generator/TODO
with
107 additions
and
56 deletions
generator/TODO
+
107
−
56
View file @
35a54abc
- clean up stdlib.ml
- implement stdlib.js to match all functions of stdlib.ml
- remove JsNumber by binding a set of operations in stdlib.js
implemented using builtin JS primitives
- reactivate
default: throw "No matching case for switch";
by having js_of_pattern return an additional boolean indicating
whether there was a default case or not.
- optimize the lineof file to generate code that, at initialization
fills in an array with brute data, and a function that performs
look ups in the array to get the output
=========================================================
FIRST
- remove intermediate folder "miniml" in "../jsjsref/miniml/.."
- update the code that translates esprima syntax to recognize
"use strict" directives, which come as first statement of
a body, in hte form of a raw expression of raw type "use script".
=> TODO: look for code that already does this for esprima.
=========================================================
ARTHUR
- check in Shared.ml whether we need to take absolute values
let string_sub s n l =
substring (int_abs n) (int_abs l) s
- reimplement "lineof" using a table
- here:
string_sub str (int_of_float k0) 1
=> TODO: check k0 is not negative
- generate the escaped source code
- control which file should feature logging
=========================================================
NEXT
- introduce testing functions called
- test_lineof("filename", "token") -> returns a "pos" object
- test_parse("code") -> log esprima parse and log convert
- test_exec("code") -> parse, convert, build trace, log trace
LATER
- cases seem to be in reversed order, check and fix
=> corriger à la main le jour où on s'amuse à relire le code.
=> order in pattern matching extraction seems to follow
order from the definition of the inductive type,
instead of the order of the code.
- clean up stdlib.ml
- remove unused functions
- sort out remaining ones
LATER
-
untab closing bracket for fun def
=> later maybe
- implement stdlib.js
-
need to have one function for each one of stdlib.ml
- number related functions are implemented with JS counterpart directly
- display JS values/env/heap/ctx in html
- contexts: essentially as before
- environments: need to follow the list of environment records
- heap: same as before, and do not attempt at first to show
additional information in the heap appart from key/value bindings.
- fill in the "esprima-to-ast.js" file, following the template
(throw an exception, caught and displayed as an alert message,
in case the source program uses for-in).
- Choose a small example
- test langage features one by one, using minimal input programs;
these programs should be stored in an "examples/" folder;
for each example, check the AST, check step-by-step the execution.
- test a compound example, e.g.:
var x = 3;
x = 4;
if (x === 4) {
while (true) {}
}
- write a JS function that takes an esprima AST as input (sub-language for the
moment) that generates an AST in our syntax (encoded of concrete types):
{ type : constructor; label0 : value ; … }
this should remember locations
- edit JsSyntax.ml to put readable labels
=========================================================
LATER
- write a driver in JS
- take a program in the text area
- parse to esprima
- translate to our syntax
- call JsInterpreter.js using the correct function (see run_js.ml)
- update the code that translates esprima syntax to recognize
"use strict" directives, which come as first statement of
a body, in hte form of a raw expression of raw type "use script".
(look on the web for code that already does this for esprima).
- set up the call to the appropriate function for propagating the
"strictness" info in the AST.
- add a combo box above the source textbox for loading in one click
a particular example. The source code for the examples is obtained
by including a JS file that contains an array of source code,
this file being generated from the contents of the "examples" folder.
- put online the tool on the jscert website
- make sure to describe the supported features
(ecma5 minus for-in and a few other things)
- explain that currently JS files are generated
from ML files and thus should not be edited,
although this might change in the future.
- full display of heap information
add a "+details" button
to show additional information about an object, like the
getter and setter methods, and also for each field we need
to see additional information like enumerable/configurable...
- search by predicate in the trace
- remove the "with (obj)" hack that is currently there
- introduce functions
- INTERP_RAW("x") : returns the value bound to "x" in the
current context, by looking up the linked list of arrays
- PROG_RAW("x") : returns the value bound to "x" in the
environment, using the prototype chain resolution function
- JSOF(v) : lift the encoding of a JS value to the corresponding JS value
- INTERP_VAL("x") = JSOF(INTERP_RAW("x"))
- PROG_VAL("x") = JSOF(PROG_RAW("x"))
- Reactivate the generation of the lines of the form:
default: throw "No matching case for switch";
by having js_of_pattern return an additional boolean
indicating whether there was a default case or not.
This is needed to detect bugs in the spec where the
switch are missing useful cases.
- translate stdlib.ml into stdlib.js
- correct the Makefile to make sure we do not generate everything all the time
=========================================================
LATER LATER
- There is one place where we compute a "substring" in the code;
need to check whether the argument is always nonnegative.
- Coq extraction has generated cases in the order of the definition
of the constructors in the inductive definition; this is not the
same order as in the original coq files; we should put back in
the right order, i'm afraid we need to do this by hand.
-
=> binder qq part vers une comparaison --- dans un fichier js
_compare_JsSyntax_native_error
_compare_JsSyntax_prealloc
-
Investigate generation of english sentences from esprima AST
of the code of the interpreter, with live visualization of
the sentences being executed.
=========================================================
OPTIMIZATIONS
- The representation of the heap could be optimized by
having "remove" nodes in the list describing a heap,
this would avoid filtering through the heap in O(n).
==========
- Optimize heap representations using trees, to improve
lookups from O(n) to O(log n).
TODO: demo of double clicking goes to the right page in ecma in english
- Only introduce logging instructions in files for which
they are going to be used.
TODO: interpretation of comparison function in the search by "predicate"
might want to automatically "lift" basic values to their encoding
(unless some box is checked to prevent this behavior)
example: "x == 3" means:
"similar(x, { type: "value", tag: "value_prim", value: { type: "prim", tag: "float", value: 3.0 } })".
=========================================================
NEVER
- There is an extra tab when closing bracket for fun def
=========================================================
where similar is a recursive structural comparison function (not going through the heap)
==========
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment