right in the middle of fixing namespace bugs.
This commit is contained in:
parent
ee86bce394
commit
d8fd834442
|
@ -192,19 +192,21 @@
|
||||||
[(FinalizeModuleInvokation!? op)
|
[(FinalizeModuleInvokation!? op)
|
||||||
(define modname (symbol->string (ModuleLocator-name (FinalizeModuleInvokation!-path op))))
|
(define modname (symbol->string (ModuleLocator-name (FinalizeModuleInvokation!-path op))))
|
||||||
(string-append
|
(string-append
|
||||||
(format "M.modules[~s].finalizeModuleInvokation();"
|
"(function (selfMod,ns,prefix) {"
|
||||||
modname)
|
|
||||||
|
|
||||||
"(function (ns) {"
|
|
||||||
(string-join (for/list: : (Listof String) ([a-provide : ModuleProvide (FinalizeModuleInvokation!-provides op)])
|
(string-join (for/list: : (Listof String) ([a-provide : ModuleProvide (FinalizeModuleInvokation!-provides op)])
|
||||||
(cond [(kernel-module-name? (ModuleProvide-source a-provide))
|
(cond [(kernel-module-name? (ModuleProvide-source a-provide))
|
||||||
(format "ns.set(~s, M.primitives[~s]);"
|
(format "ns.set(~s, M.primitives[~s]);"
|
||||||
(symbol->string (ModuleProvide-external-name a-provide))
|
(symbol->string (ModuleProvide-external-name a-provide))
|
||||||
(symbol->string (ModuleProvide-internal-name a-provide)))]
|
(symbol->string (ModuleProvide-internal-name a-provide)))]
|
||||||
|
[(equal? (ModuleLocator-name (ModuleProvide-source a-provide))
|
||||||
|
(ModuleLocator-name (FinalizeModuleInvokation!-path op)))
|
||||||
|
(format "ns.set(~s, prefix[selfMod.getPrefixOffset(~s)]);"
|
||||||
|
(symbol->string (ModuleProvide-internal-name a-provide))
|
||||||
|
(symbol->string (ModuleProvide-internal-name a-provide)))]
|
||||||
[else
|
[else
|
||||||
(format "ns.set(~s, M.modules[~s].getNamespace().get(~s));"
|
(format "ns.set(~s, M.modules[~s].getNamespace().get(~s));"
|
||||||
(symbol->string (ModuleProvide-external-name a-provide))
|
(symbol->string (ModuleProvide-external-name a-provide))
|
||||||
(symbol->string (ModuleLocator-name (ModuleProvide-source a-provide)))
|
(symbol->string (ModuleLocator-name (ModuleProvide-source a-provide)))
|
||||||
(symbol->string (ModuleProvide-internal-name a-provide)))]))
|
(symbol->string (ModuleProvide-internal-name a-provide)))]))
|
||||||
"")
|
"")
|
||||||
(format "}(M.modules[~s].getNamespace()));" modname))]))
|
(format "}(M.modules[~s],M.modules[~s].getNamespace(),M.modules[~s].prefix));" modname modname modname))]))
|
||||||
|
|
|
@ -173,12 +173,13 @@
|
||||||
(for/list ([modprovide (get-provided-names bytecode)]
|
(for/list ([modprovide (get-provided-names bytecode)]
|
||||||
[i (in-naturals)])
|
[i (in-naturals)])
|
||||||
(string-append
|
(string-append
|
||||||
; (format "modrec.getNamespace().set(~s,exports[~s]);\n"
|
(format "modrec.getNamespace().set(~s,exports[~s]);\n"
|
||||||
; (symbol->string (ModuleProvide-internal-name modprovide))
|
(symbol->string (ModuleProvide-external-name modprovide))
|
||||||
; (symbol->string (ModuleProvide-external-name modprovide)))
|
(symbol->string (ModuleProvide-internal-name modprovide)))
|
||||||
(format "modrec.prefix[~a]=exports[~s];\n"
|
;(format "modrec.prefix[~a]=exports[~s];\n"
|
||||||
i
|
; i
|
||||||
(symbol->string (ModuleProvide-external-name modprovide)))))))
|
; (symbol->string (ModuleProvide-external-name modprovide))))
|
||||||
|
))))
|
||||||
|
|
||||||
(define (get-prefix-code bytecode)
|
(define (get-prefix-code bytecode)
|
||||||
(format "modrec.prefix=[~a];modrec.prefix.names=[~a];modrec.prefix.internalNames=[~a];"
|
(format "modrec.prefix=[~a];modrec.prefix.names=[~a];modrec.prefix.internalNames=[~a];"
|
||||||
|
@ -220,7 +221,6 @@
|
||||||
(function(MACHINE, EXPORTS){~a})(M, exports);
|
(function(MACHINE, EXPORTS){~a})(M, exports);
|
||||||
~a
|
~a
|
||||||
modrec.privateExports = exports;
|
modrec.privateExports = exports;
|
||||||
modrec.finalizeModuleInvokation();
|
|
||||||
return M.c.pop().label(M);"
|
return M.c.pop().label(M);"
|
||||||
(symbol->string name)
|
(symbol->string name)
|
||||||
(get-prefix-code bytecode)
|
(get-prefix-code bytecode)
|
||||||
|
|
|
@ -10,36 +10,13 @@
|
||||||
var Namespace = function(modrec) {
|
var Namespace = function(modrec) {
|
||||||
this.modrec = modrec;
|
this.modrec = modrec;
|
||||||
|
|
||||||
// string -> integer
|
// Returns the key/value pairs of the prefix.
|
||||||
// Returns the position within the prefix that we should be looking.
|
// mapping: string -> value
|
||||||
this.mapping = {};
|
this.mapping = {};
|
||||||
this.prefix = void(0);
|
|
||||||
this.extra = {};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
Namespace.prototype.get = function(name) {
|
Namespace.prototype.get = function(name) {
|
||||||
if (this.mapping.hasOwnProperty(name)) {
|
return this.mapping[name];
|
||||||
return this.prefix[this.mapping[name]];
|
|
||||||
}
|
|
||||||
if (this.extra.hasOwnProperty(name)) {
|
|
||||||
return this.extra[name];
|
|
||||||
}
|
|
||||||
return void(0);
|
|
||||||
};
|
|
||||||
|
|
||||||
Namespace.prototype.refreshPrefixMapping = function() {
|
|
||||||
var prefix = this.modrec.prefix;
|
|
||||||
var name;
|
|
||||||
var i;
|
|
||||||
for (i = 0; i < prefix.length; i++) {
|
|
||||||
name = prefix.names[i];
|
|
||||||
this.mapping[name] = i;
|
|
||||||
if (this.extra.hasOwnProperty(name)) {
|
|
||||||
prefix[i] = this.extra[name];
|
|
||||||
delete this.extra[name];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this.prefix = prefix;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
Namespace.prototype.hasKey = function(name) {
|
Namespace.prototype.hasKey = function(name) {
|
||||||
|
@ -47,16 +24,7 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
Namespace.prototype.set = function(name, value) {
|
Namespace.prototype.set = function(name, value) {
|
||||||
if (this.mapping.hasOwnProperty(name)) {
|
this.mapping[name] = value;
|
||||||
this.prefix[this.mapping[name]] = value;
|
|
||||||
return;
|
|
||||||
};
|
|
||||||
if (this.extra.hasOwnProperty(name)) {
|
|
||||||
this.extra[name] = value;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
this.extra[name] = value;
|
|
||||||
return;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
var ModuleRecord = function (name, label) {
|
var ModuleRecord = function (name, label) {
|
||||||
|
@ -87,11 +55,6 @@
|
||||||
return this.namespace;
|
return this.namespace;
|
||||||
};
|
};
|
||||||
|
|
||||||
ModuleRecord.prototype.finalizeModuleInvokation = function () {
|
|
||||||
this.namespace.refreshPrefixMapping();
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// External invokation of a module.
|
// External invokation of a module.
|
||||||
ModuleRecord.prototype.invoke = function (MACHINE, succ, fail) {
|
ModuleRecord.prototype.invoke = function (MACHINE, succ, fail) {
|
||||||
this._invoke(false, MACHINE, succ, fail);
|
this._invoke(false, MACHINE, succ, fail);
|
||||||
|
|
|
@ -14,11 +14,6 @@
|
||||||
"../js-assembler/package.rkt"
|
"../js-assembler/package.rkt"
|
||||||
"../parser/parse-bytecode.rkt"
|
"../parser/parse-bytecode.rkt"
|
||||||
"../compiler/compiler.rkt"
|
"../compiler/compiler.rkt"
|
||||||
"../compiler/expression-structs.rkt"
|
|
||||||
"../compiler/il-structs.rkt"
|
|
||||||
"../compiler/lexical-structs.rkt"
|
|
||||||
"../compiler/compiler-structs.rkt"
|
|
||||||
"../compiler/optimize-il.rkt"
|
|
||||||
"../js-assembler/assemble.rkt"
|
"../js-assembler/assemble.rkt"
|
||||||
"write-runtime.rkt"
|
"write-runtime.rkt"
|
||||||
(for-syntax racket/base))
|
(for-syntax racket/base))
|
||||||
|
@ -79,7 +74,7 @@
|
||||||
(define op (open-output-bytes))
|
(define op (open-output-bytes))
|
||||||
(write raw-bytecode op)
|
(write raw-bytecode op)
|
||||||
(define whalesong-bytecode (parse-bytecode (open-input-bytes (get-output-bytes op))))
|
(define whalesong-bytecode (parse-bytecode (open-input-bytes (get-output-bytes op))))
|
||||||
#;(pretty-print whalesong-bytecode)
|
(pretty-print whalesong-bytecode)
|
||||||
(define compiled-bytecode (compile-for-repl whalesong-bytecode))
|
(define compiled-bytecode (compile-for-repl whalesong-bytecode))
|
||||||
#;(pretty-print compiled-bytecode)
|
#;(pretty-print compiled-bytecode)
|
||||||
(define assembled-op (open-output-string))
|
(define assembled-op (open-output-string))
|
||||||
|
|
Loading…
Reference in New Issue
Block a user