From 2bfc143b45c28f780871e646e95f9711c4005a1a Mon Sep 17 00:00:00 2001 From: Danny Yoo Date: Mon, 13 Feb 2012 13:34:01 -0500 Subject: [PATCH] resources as base64 --- Makefile | 4 ++-- js-assembler/assemble-helpers.rkt | 9 ++++----- js-assembler/runtime-src/base64.js | 6 +++++- js-assembler/runtime-src/baselib-bytes.js | 6 ++++++ js-assembler/runtime-src/runtime.js | 2 ++ version.rkt | 2 +- 6 files changed, 20 insertions(+), 9 deletions(-) diff --git a/Makefile b/Makefile index c487a6e..4bb07f5 100644 --- a/Makefile +++ b/Makefile @@ -45,8 +45,8 @@ cs019-doc: setup: - raco setup --no-docs -P dyoo whalesong.plt 1 14 + raco setup --no-docs -P dyoo whalesong.plt 1 15 planet-link: - raco planet link dyoo whalesong.plt 1 14 . + raco planet link dyoo whalesong.plt 1 15 . diff --git a/js-assembler/assemble-helpers.rkt b/js-assembler/assemble-helpers.rkt index 7839efc..2d1c447 100644 --- a/js-assembler/assemble-helpers.rkt +++ b/js-assembler/assemble-helpers.rkt @@ -10,7 +10,8 @@ racket/match) - +(require/typed net/base64 + [base64-encode (Bytes -> Bytes)]) (provide assemble-oparg assemble-target @@ -143,10 +144,8 @@ ;; This needs to be an array, because this may contain ;; a LOT of elements, and certain JS evaluators will break ;; otherewise. - (format "RT.makeBytes([~a])" - (string-join (for/list ([a-byte val]) - (number->string a-byte)) - ","))] + (format "RT.makeBytesFromBase64(~s)" + (bytes->string/utf-8 (base64-encode val)))] [(path? val) (format "RT.makePath(~s)" (path->string val))] diff --git a/js-assembler/runtime-src/base64.js b/js-assembler/runtime-src/base64.js index a842fcc..1e8e171 100644 --- a/js-assembler/runtime-src/base64.js +++ b/js-assembler/runtime-src/base64.js @@ -6,6 +6,10 @@ * * dyoo: modified to work with arrays of bytes rather than assume * the bytes are strings. + * + * Provides a Base64 object with two methods: + * Base64.encode: string -> string + * Base64.decode: string -> string **/ var Base64 = (function() { 'use strict'; @@ -71,7 +75,7 @@ var Base64 = (function() { outputBytes.push(chr3); } } - return outputBytes; + return outputBytes.join(''); } }; return Base64; diff --git a/js-assembler/runtime-src/baselib-bytes.js b/js-assembler/runtime-src/baselib-bytes.js index 3d701c0..d40a927 100644 --- a/js-assembler/runtime-src/baselib-bytes.js +++ b/js-assembler/runtime-src/baselib-bytes.js @@ -119,11 +119,17 @@ return new Bytes(chars); }; + var makeBytesFromBase64 = function(byteString) { + return new Bytes(Base64.decode(byteString).split('')); + }; + + var isBytes = baselib.makeClassPredicate(Bytes); exports.Bytes = Bytes; exports.makeBytes = makeBytes; + exports.makeBytesFromBase64 = makeBytesFromBase64; exports.isBytes = isBytes; diff --git a/js-assembler/runtime-src/runtime.js b/js-assembler/runtime-src/runtime.js index 1f50cd0..b0d3111 100644 --- a/js-assembler/runtime-src/runtime.js +++ b/js-assembler/runtime-src/runtime.js @@ -48,6 +48,7 @@ var makeSymbol = baselib.symbols.makeSymbol; var makePath = baselib.paths.makePath; var makeBytes = baselib.bytes.makeBytes; + var makeBytesFromBase64 = baselib.bytes.makeBytesFromBase64; var makeBox = baselib.boxes.makeBox; var isBox = baselib.boxes.isBox; @@ -885,6 +886,7 @@ exports['makeSymbol'] = makeSymbol; exports['makePath'] = makePath; exports['makeBytes'] = makeBytes; + exports['makeBytesFromBase64'] = makeBytesFromBase64; exports['checkPair'] = baselib.check.checkPair; diff --git a/version.rkt b/version.rkt index 8311c00..32821e7 100644 --- a/version.rkt +++ b/version.rkt @@ -7,4 +7,4 @@ (provide version) (: version String) -(define version "1.116") +(define version "1.118")