switched over symbols to Symbol class

This commit is contained in:
Danny Yoo 2011-07-14 15:12:19 -04:00
parent d29410b738
commit 06aaf51cb8
5 changed files with 21 additions and 86 deletions

View File

@ -99,7 +99,7 @@
(define (assemble-const stmt)
(let: loop : String ([val : Any (Const-const stmt)])
(cond [(symbol? val)
(format "~s" (symbol->string val))]
(format "RUNTIME.makeSymbol(~s)" (symbol->string val))]
[(pair? val)
(format "RUNTIME.makePair(~a, ~a)"
(loop (car val))

View File

@ -103,6 +103,10 @@
plt.baselib.ports.isOutputPort,
'output port');
var checkSymbol = makeCheckArgumentType(
plt.baselib.symbols.isSymbol,
'symbol');
var checkString = makeCheckArgumentType(
plt.baselib.strings.isString,
'string');
@ -182,6 +186,7 @@
exports.checkOutputPort = checkOutputPort;
exports.checkString = checkString;
exports.checkSymbol = checkSymbol;
exports.checkProcedure = checkProcedure;
exports.checkNumber = checkNumber;
exports.checkReal = checkReal;

View File

@ -48,11 +48,14 @@
var isSymbol = function(x) { return x instanceof Symbol; };
var makeSymbol = function(s) { return Symbol.makeInstance(s); };
//////////////////////////////////////////////////////////////////////
exports.Symbol = Symbol;
exports.makeSymbol = makeSymbol;
exports.isSymbol = isSymbol;
})(this['plt'].baselib);

View File

@ -23,6 +23,7 @@ if(this['plt'] === undefined) { this['plt'] = {}; }
var isList = plt.baselib.lists.isList;
var isVector = plt.baselib.vectors.isVector;
var isString = plt.baselib.strings.isString;
var isSymbol = plt.baselib.symbols.isSymbol;
var isNonNegativeReal = plt.baselib.numbers.isNonNegativeReal;
var equals = plt.baselib.equality.equals;
@ -40,6 +41,8 @@ if(this['plt'] === undefined) { this['plt'] = {}; }
var makeBignum = plt.baselib.numbers.makeBignum;
var makeComplex = plt.baselib.numbers.makeComplex;
var makeSymbol = plt.baselib.symbols.makeSymbol;
var makeBox = plt.baselib.boxes.makeBox;
var isBox = plt.baselib.boxes.isBox;
@ -106,6 +109,7 @@ if(this['plt'] === undefined) { this['plt'] = {}; }
var checkOutputPort = plt.baselib.check.checkOutputPort;
var checkString = plt.baselib.check.checkString;
var checkSymbol = plt.baselib.check.checkSymbol;
var checkProcedure = plt.baselib.check.checkProcedure;
var checkNumber = plt.baselib.check.checkNumber;
var checkReal = plt.baselib.check.checkReal;
@ -979,7 +983,7 @@ if(this['plt'] === undefined) { this['plt'] = {}; }
1,
function(MACHINE) {
var firstArg = MACHINE.env[MACHINE.env.length-1];
return plt.baselib.symbols.isSymbol(firstArg);
return isSymbol(firstArg);
});
installPrimitiveProcedure(
@ -1659,86 +1663,6 @@ if(this['plt'] === undefined) { this['plt'] = {}; }
// installPrimitiveProcedure(
// 'make-struct-field-accessor',
// makeList(2, 3),
// function(MACHINE) {
// var accessor, fieldPos, fieldName;
// accessor = MACHINE.env[MACHINE.env.length-1];
// fieldPos = MACHINE.env[MACHINE.env.length-2];
// if (MACHINE.argcount === 2) {
// fieldName = 'field' + fieldPos;
// } else {
// fieldName = MACHINE.env[MACHINE.env.length-3];
// }
// testArgument(MACHINE,
// 'accessor procedure that requires a field index',
// function(x) {
// return (x instanceof types.StructAccessorProc &&
// x.numParams > 1);
// },
// accessor,
// 0,
// 'make-struct-field-accessor');
// testArgument(MACHINE,
// 'exact non-negative integer',
// isNatural,
// fieldPos,
// 'make-struct-field-accessor',
// 1)
// testArgument(MACHINE,
// 'symbol or #f',
// function(x) {
// return x === false || isSymbol(x);
// },
// 'make-struct-field-accessor',
// fieldName,
// 2);
// var procName = accessor.type.name + '-' fieldName;
// return new types.StructAccessorProc(
// accessor.type,
// procName,
// 1,
// false,
// false,
// function(MACHINE) {
// testArgument(MACHINE,
// 'struct:' + accessor.type.name,
// accessor.type.predicate,
// MACHINE.env[MACHINE.env.length - 1],
// procName,
// 0);
// return accessor.impl(x, fieldPos);
// });
// });
// Javascript-specific extensions. A small experiment.
@ -1937,7 +1861,7 @@ if(this['plt'] === undefined) { this['plt'] = {}; }
exports['makeRational'] = makeRational;
exports['makeBignum'] = makeBignum;
exports['makeComplex'] = makeComplex;
exports['makeSymbol'] = makeSymbol;
// Type predicates
@ -1948,6 +1872,7 @@ if(this['plt'] === undefined) { this['plt'] = {}; }
exports['isOutputStringPort'] = isOutputStringPort;
exports['isBox'] = isBox;
exports['isString'] = isString;
exports['isSymbol'] = isSymbol;
exports['isNumber'] = isNumber;
exports['isNatural'] = isNatural;
exports['isReal'] = isReal;

View File

@ -41,6 +41,7 @@ EOF
(syntax/loc #'stx
(begin
(printf "running test... ~s" (syntax->datum #'stx))
(flush-output)
(let ([result (evaluate s)])
(let ([output (evaluated-stdout result)])
(unless (string=? output exp)
@ -55,7 +56,8 @@ EOF
(with-syntax ([stx stx])
(syntax/loc #'stx
(begin
(printf "running test...")
(printf "running test... ~s" (syntax->datum #'stx))
(flush-output)
(let ([an-error-happened
(with-handlers ([error-happened?
(lambda (exn)
@ -106,14 +108,14 @@ EOF
"25")
;; fixme: symbols need to be represented separately from strings.
(test/exn (evaluate '(/ 3 'four))
"Error: /: expected number as argument 2 but received \"four\"")
"Error: /: expected number as argument 2 but received four")
(test '(display (- 1))
"-1")
(test/exn '(- 'one)
"Error: -: expected number as argument 1 but received \"one\"")
"Error: -: expected number as argument 1 but received one")
(test '(display (- 5 4))
"1")