Skip to content

Commit 2572e99

Browse files
committed
implement nodictionary
1 parent de24fce commit 2572e99

File tree

8 files changed

+37
-18
lines changed

8 files changed

+37
-18
lines changed

GlowScriptOffline/glowscript_libraries/RScompiler.3.2.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

GlowScriptOffline/glowscript_libraries/compiler.3.2.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

GlowScriptOffline3.2.zip

-2.93 KB
Binary file not shown.

ide/ide.js

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -31,20 +31,21 @@ $(function () {
3131
else source = 'already exists\n'
3232
let header = sourceLines[0]
3333
// Remove a newline or similar character at the end of header:
34-
if (header.charCodeAt(header.length-1) < 32)
35-
header = header.substring(0,header.length-1)
34+
if (header.charCodeAt(header.length-1) < 32) header = header.substring(0,header.length-1)
3635
let rest = source.substr( sourceLines[0].length+1 )
37-
let ret = {
36+
let ret = {
3837
version: null,
3938
lang: '', // 'vpython' (default) or 'javascript' or a string that is neither (e.g. when editing header)
39+
nodictionary: false,
4040
source: rest,
4141
ok: false,
4242
unpackaged: false,
4343
isCurrent: false
4444
}
4545
// Here are the possible headers (version can be for example 3.2 or 3.3dev)
4646
// 2 entries: 'JavaScript 3.2', 'GlowScript 3.2'
47-
// 3 entries: 'GlowScript 3.2 VPython', 'GlowScript 3.2 JavaScript', 'Web VPython 3.2', Web VPython 3.3dev
47+
// 3 entries: 'GlowScript 3.2 VPython', 'GlowScript 3.2 JavaScript', 'Web VPython 3.2', 'Web VPython 3.3dev'
48+
// 4 entries: 'GlowScript 3.2 VPython nodictionary', 'Web VPython 3.2 nodictionary'
4849
header = header.toLowerCase()
4950
header = header.split(" ")
5051
if (header.length === undefined) return ret
@@ -53,14 +54,14 @@ $(function () {
5354
for (let i=0; i<header.length; i++) { // remove empty strings corresponding to spaces
5455
if (header[i] != '') elements.push(header[i])
5556
}
56-
if (elements.length < 2 || elements.length > 3) return ret
57+
if (elements.length < 2 || elements.length > 4) return ret
5758
if (elements[0] != 'glowscript' && elements[0] != 'web' && elements[0] != 'javascript') return ret
5859
let ver
5960
if (elements.length == 2) {
6061
if (elements[0] != 'glowscript' && elements[0] != 'javascript') return ret
6162
ret.lang = 'javascript'
6263
ver = elements[1]
63-
} else {
64+
} else if (elements.length == 3) {
6465
if (elements[0] == 'web' && elements[1] == 'vpython') {
6566
ret.lang = 'vpython'
6667
ver = elements[2]
@@ -70,15 +71,25 @@ $(function () {
7071
ret.lang = elements[2]
7172
ver = elements[1]
7273
}
74+
} else { // 4 elements
75+
if (elements[0] == 'web' && elements[1] == 'vpython') {
76+
ret.lang = 'vpython'
77+
ver = elements[2]
78+
if (elements[3] == 'nodictionary') ret.nodictionary = true
79+
else return ret
80+
}
7381
}
82+
7483
let okv = parseVersionHeader.okVersions[ver]
7584
if (okv === undefined) okv = false
7685
// Prior to version 3.0, we stripped the header line from the source:
7786
else if (Number(okv) < 3.0) source = source.substr(sourceLines[0].length+1)
7887
let unpackaged = (okv === "unpackaged")
88+
console.log('ide 88', ret)
7989
return {
8090
version: okv,
8191
lang: ret.lang,
92+
nodictionary: ret.nodictionary,
8293
source: source,
8394
ok: okv,
8495
unpackaged:unpackaged,
@@ -1133,7 +1144,9 @@ $(function () {
11331144
var header = parseVersionHeader( progData.source )
11341145
if (header.ok) {
11351146
haveScreenshot = progData.screenshot != ""
1136-
sendMessage(JSON.stringify({ program: header.source, version: header.version, lang: header.lang, unpackaged: header.unpackaged, autoscreenshot:isWritable && !haveScreenshot }))
1147+
sendMessage(JSON.stringify({ program: header.source, version: header.version,
1148+
lang: header.lang, nodictionary: header.nodictionary, unpackaged: header.unpackaged,
1149+
autoscreenshot:isWritable && !haveScreenshot }))
11371150
} else {
11381151
if ($dialog) $dialog.dialog("close")
11391152
$dialog = $("#version-error-dialog").clone().removeClass("template")
@@ -1324,9 +1337,11 @@ $(function () {
13241337
if (header.source.indexOf('MathJax') >= 0)
13251338
mathjax = '<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=TeX-MML-AM_CHTML"></script>\n'
13261339

1327-
var embedScript = window.glowscript_compile(header.source,
1328-
{lang: header.lang, version: header.version.substr(0,3), run: false})
1329-
var divid = "glowscript"
1340+
var embedScript = window.glowscript_compile(header.source,
1341+
{lang: header.lang, version: header.version.substr(0,3),
1342+
run: false, nodictionary: header.nodictionary})
1343+
console.log('ide 1343', embedScript)
1344+
var divid = "glowscript"
13301345
var remove = header.version==='0.3' ? '' : '.removeAttr("id")'
13311346
var main
13321347
var v = Number(header.version.substr(0,3))

lib/compiling/GScompiler.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -786,6 +786,7 @@ where compile() was called, in untrusted/run.js.
786786
// options include lang ('javascript' or 'vpython'), version,
787787
// run (true if will run the code, false if compiling for sharing, in which case don't call fontloading)
788788
options = options || {}
789+
console.log(789, options)
789790
window.__original = {text: program.split("\n")}
790791
window.__GSlang = options.lang
791792
var version = '["'+options.version+'", "glowscript"]' // e.g. ['1.1', 'glowscript']
@@ -831,7 +832,10 @@ where compile() was called, in untrusted/run.js.
831832
program = program.replace(/\.sort\s*\(/g, '.pysort(') // Make sort equivalent to pysort (RapydScript python-like sort)
832833
prog = "def __main__():\n version = "+version+"\n"
833834

834-
prog += " from __python__ import dict_literals, overload_getitem\n" // so that dictionaries behave like Python dictionaries
835+
// As of Web VPython 3.2, we choose for RapydScript to implement true Python dictionaries.
836+
// However, this has the effect of transpiling a = [10, 11, 12, 13]; a[2] += 5 to slow ρσ_setitem(a, 2, ρσ_getitem(a, 2)["+"](5));
837+
// If the user says "Web VPython 3.2 nodictionary" this compiles to fast a[2]=a[2]["+"](5);
838+
if (!options.nodictionary) prog += " from __python__ import dict_literals, overload_getitem\n"
835839

836840
prog += " window.__GSlang = 'vpython'\n" // WebGLRenderer needs to know at run time what models to create
837841
// let hasvec = (VPython_names.indexOf('vec') >= 0)

package/RScompiler.3.2.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package/compiler.3.2.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

untrusted/run.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,7 @@ function ideRun() {
269269
var container = $("#glowscript")
270270
if (message.version !== "0.3") container.removeAttr("id")
271271

272-
compileAndRun(message.program, container, message.lang, progver)
272+
compileAndRun(message.program, container, message.lang, progver, message.nodictionary)
273273
if (message.autoscreenshot)
274274
setTimeout(function () {
275275
if (!window.lasterr)
@@ -289,9 +289,9 @@ function ideRun() {
289289

290290
var ver
291291

292-
async function compileAndRun(program, container, lang, version) {
292+
async function compileAndRun(program, container, lang, version, nodictionary) {
293293
if (program[0] == '\n') program = program.substr(1) // There can be a spurious '\n' at the start of the program source
294-
var options = {lang: lang, version: version, run: true}
294+
var options = {lang: lang, version: version, run: true, nodictionary: nodictionary}
295295
try { // compile the user program:
296296
program = glowscript_compile(program, options)
297297
if (lang == 'javascript' && (options.version >= 2.9 || options.version == 'unp') ) {

0 commit comments

Comments
 (0)