From 2da0c25569ef86219ecde1f8a1bb5d15d188bac6 Mon Sep 17 00:00:00 2001 From: "lrn@chromium.org" Date: Fri, 31 Oct 2008 10:19:01 +0000 Subject: [PATCH] Reverting patch on wrong branch. git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@668 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- regexp2000/AUTHORS | 13 - regexp2000/ChangeLog | 403 - regexp2000/LICENSE | 46 - regexp2000/SConstruct | 578 -- regexp2000/benchmarks/README.txt | 29 - regexp2000/benchmarks/base.js | 221 - regexp2000/benchmarks/crypto.js | 1698 --- regexp2000/benchmarks/deltablue.js | 880 -- regexp2000/benchmarks/earley-boyer.js | 4685 --------- regexp2000/benchmarks/raytrace.js | 3434 ------- regexp2000/benchmarks/richards.js | 539 - regexp2000/benchmarks/run.html | 171 - regexp2000/benchmarks/run.js | 59 - regexp2000/benchmarks/v8-logo.png | Bin 24293 -> 0 bytes regexp2000/include/v8-debug.h | 143 - regexp2000/include/v8.h | 2433 ----- regexp2000/samples/SConscript | 38 - regexp2000/samples/count-hosts.js | 42 - regexp2000/samples/process.cc | 624 -- regexp2000/samples/shell.cc | 258 - regexp2000/src/SConscript | 160 - regexp2000/src/accessors.cc | 510 - regexp2000/src/accessors.h | 97 - regexp2000/src/allocation.cc | 187 - regexp2000/src/allocation.h | 167 - regexp2000/src/api.cc | 2966 ------ regexp2000/src/api.h | 490 - regexp2000/src/apinatives.js | 93 - regexp2000/src/arguments.h | 70 - regexp2000/src/array.js | 959 -- regexp2000/src/assembler-arm-inl.h | 243 - regexp2000/src/assembler-arm.cc | 1502 --- regexp2000/src/assembler-arm.h | 784 -- regexp2000/src/assembler-ia32-inl.h | 266 - regexp2000/src/assembler-ia32.cc | 2069 ---- regexp2000/src/assembler-ia32.h | 811 -- regexp2000/src/assembler.cc | 575 -- regexp2000/src/assembler.h | 476 - regexp2000/src/ast.cc | 368 - regexp2000/src/ast.h | 1448 --- regexp2000/src/bootstrapper.cc | 1457 --- regexp2000/src/bootstrapper.h | 74 - regexp2000/src/builtins-arm.cc | 821 -- regexp2000/src/builtins-ia32.cc | 902 -- regexp2000/src/builtins.cc | 714 -- regexp2000/src/builtins.h | 227 - regexp2000/src/char-predicates-inl.h | 64 - regexp2000/src/char-predicates.h | 62 - regexp2000/src/checks.cc | 100 - regexp2000/src/checks.h | 259 - regexp2000/src/code-stubs.cc | 140 - regexp2000/src/code-stubs.h | 109 - regexp2000/src/code.h | 67 - regexp2000/src/codegen-arm.cc | 4193 -------- regexp2000/src/codegen-arm.h | 376 - regexp2000/src/codegen-ia32.cc | 5122 --------- regexp2000/src/codegen-ia32.h | 428 - regexp2000/src/codegen-inl.h | 76 - regexp2000/src/codegen.cc | 474 - regexp2000/src/codegen.h | 288 - regexp2000/src/compilation-cache.cc | 180 - regexp2000/src/compilation-cache.h | 98 - regexp2000/src/compiler.cc | 294 - regexp2000/src/compiler.h | 72 - regexp2000/src/constants-arm.h | 208 - regexp2000/src/contexts.cc | 218 - regexp2000/src/contexts.h | 322 - regexp2000/src/conversions-inl.h | 93 - regexp2000/src/conversions.cc | 702 -- regexp2000/src/conversions.h | 116 - regexp2000/src/counters.cc | 56 - regexp2000/src/counters.h | 200 - regexp2000/src/cpu-arm.cc | 124 - regexp2000/src/cpu-ia32.cc | 64 - regexp2000/src/cpu.h | 64 - regexp2000/src/d8-readline.cc | 120 - regexp2000/src/d8.cc | 348 - regexp2000/src/d8.h | 113 - regexp2000/src/d8.js | 70 - regexp2000/src/date-delay.js | 1020 -- regexp2000/src/dateparser.cc | 265 - regexp2000/src/dateparser.h | 230 - regexp2000/src/debug-delay.js | 2030 ---- regexp2000/src/debug.cc | 1972 ---- regexp2000/src/debug.h | 582 -- regexp2000/src/disasm-arm.cc | 937 -- regexp2000/src/disasm-ia32.cc | 1142 -- regexp2000/src/disasm.h | 77 - regexp2000/src/disassembler.cc | 309 - regexp2000/src/disassembler.h | 55 - regexp2000/src/dtoa-config.c | 66 - regexp2000/src/execution.cc | 529 - regexp2000/src/execution.h | 262 - regexp2000/src/factory.cc | 841 -- regexp2000/src/factory.h | 343 - regexp2000/src/flag-definitions.h | 323 - regexp2000/src/flags.cc | 459 - regexp2000/src/flags.h | 78 - regexp2000/src/frames-arm.cc | 123 - regexp2000/src/frames-arm.h | 381 - regexp2000/src/frames-ia32.cc | 121 - regexp2000/src/frames-ia32.h | 293 - regexp2000/src/frames-inl.h | 185 - regexp2000/src/frames.cc | 589 -- regexp2000/src/frames.h | 587 -- regexp2000/src/global-handles.cc | 379 - regexp2000/src/global-handles.h | 154 - regexp2000/src/globals.h | 507 - regexp2000/src/handles-inl.h | 73 - regexp2000/src/handles.cc | 549 - regexp2000/src/handles.h | 241 - regexp2000/src/hashmap.cc | 170 - regexp2000/src/hashmap.h | 116 - regexp2000/src/heap-inl.h | 274 - regexp2000/src/heap.cc | 3195 ------ regexp2000/src/heap.h | 1207 --- regexp2000/src/ic-arm.cc | 598 -- regexp2000/src/ic-ia32.cc | 812 -- regexp2000/src/ic-inl.h | 91 - regexp2000/src/ic.cc | 1201 --- regexp2000/src/ic.h | 366 - regexp2000/src/jsregexp.cc | 1051 -- regexp2000/src/jsregexp.h | 143 - regexp2000/src/list-inl.h | 116 - regexp2000/src/list.h | 120 - regexp2000/src/log.cc | 849 -- regexp2000/src/log.h | 245 - regexp2000/src/macro-assembler-arm.cc | 883 -- regexp2000/src/macro-assembler-arm.h | 287 - regexp2000/src/macro-assembler-ia32.cc | 1014 -- regexp2000/src/macro-assembler-ia32.h | 328 - regexp2000/src/macro-assembler.h | 50 - regexp2000/src/macros.py | 98 - regexp2000/src/mark-compact.cc | 1776 ---- regexp2000/src/mark-compact.h | 365 - regexp2000/src/math.js | 190 - regexp2000/src/memory.h | 61 - regexp2000/src/messages.cc | 179 - regexp2000/src/messages.h | 110 - regexp2000/src/messages.js | 678 -- regexp2000/src/mirror-delay.js | 1924 ---- regexp2000/src/mksnapshot.cc | 186 - regexp2000/src/natives.h | 62 - regexp2000/src/objects-debug.cc | 1057 -- regexp2000/src/objects-inl.h | 2393 ----- regexp2000/src/objects.cc | 6731 ------------ regexp2000/src/objects.h | 4132 -------- regexp2000/src/parser.cc | 3982 ------- regexp2000/src/parser.h | 167 - regexp2000/src/platform-linux.cc | 697 -- regexp2000/src/platform-macos.cc | 652 -- regexp2000/src/platform-nullos.cc | 421 - regexp2000/src/platform-win32.cc | 1574 --- regexp2000/src/platform.h | 449 - regexp2000/src/prettyprinter.cc | 1052 -- regexp2000/src/prettyprinter.h | 117 - regexp2000/src/property.cc | 109 - regexp2000/src/property.h | 389 - regexp2000/src/regexp-delay.js | 373 - regexp2000/src/rewriter.cc | 329 - regexp2000/src/rewriter.h | 52 - regexp2000/src/runtime.cc | 5532 ---------- regexp2000/src/runtime.h | 368 - regexp2000/src/runtime.js | 524 - regexp2000/src/scanner.cc | 826 -- regexp2000/src/scanner.h | 239 - regexp2000/src/scopeinfo.cc | 571 - regexp2000/src/scopeinfo.h | 158 - regexp2000/src/scopes.cc | 895 -- regexp2000/src/scopes.h | 346 - regexp2000/src/serialize.cc | 1516 --- regexp2000/src/serialize.h | 334 - regexp2000/src/shell.h | 49 - regexp2000/src/simulator-arm.cc | 1506 --- regexp2000/src/simulator-arm.h | 183 - regexp2000/src/simulator-ia32.cc | 30 - regexp2000/src/simulator-ia32.h | 47 - regexp2000/src/smart-pointer.h | 108 - regexp2000/src/snapshot-common.cc | 74 - regexp2000/src/snapshot-empty.cc | 39 - regexp2000/src/snapshot.h | 58 - regexp2000/src/spaces-inl.h | 319 - regexp2000/src/spaces.cc | 2527 ----- regexp2000/src/spaces.h | 1663 --- regexp2000/src/string-stream.cc | 550 - regexp2000/src/string-stream.h | 167 - regexp2000/src/string.js | 834 -- regexp2000/src/stub-cache-arm.cc | 841 -- regexp2000/src/stub-cache-ia32.cc | 1266 --- regexp2000/src/stub-cache.cc | 957 -- regexp2000/src/stub-cache.h | 480 - regexp2000/src/third_party/dtoa/COPYING | 15 - regexp2000/src/third_party/dtoa/dtoa.c | 3324 ------ regexp2000/src/third_party/jscre/ASCIICType.h | 95 - regexp2000/src/third_party/jscre/AUTHORS | 12 - regexp2000/src/third_party/jscre/COPYING | 35 - regexp2000/src/third_party/jscre/LICENSE | 85 - regexp2000/src/third_party/jscre/config.h | 143 - regexp2000/src/third_party/jscre/pcre.h | 80 - .../src/third_party/jscre/pcre_chartables.c | 96 - .../src/third_party/jscre/pcre_compile.cpp | 2673 ----- .../src/third_party/jscre/pcre_exec.cpp | 2081 ---- .../src/third_party/jscre/pcre_internal.h | 423 - .../src/third_party/jscre/pcre_tables.cpp | 71 - .../jscre/pcre_ucp_searchfuncs.cpp | 98 - .../src/third_party/jscre/pcre_xclass.cpp | 114 - .../src/third_party/jscre/ucpinternal.h | 126 - regexp2000/src/third_party/jscre/ucptable.cpp | 2968 ------ regexp2000/src/token.cc | 162 - regexp2000/src/token.h | 281 - regexp2000/src/top.cc | 901 -- regexp2000/src/top.h | 371 - regexp2000/src/unicode-inl.h | 238 - regexp2000/src/unicode.cc | 816 -- regexp2000/src/unicode.h | 285 - regexp2000/src/uri.js | 371 - regexp2000/src/usage-analyzer.cc | 438 - regexp2000/src/usage-analyzer.h | 39 - regexp2000/src/utils.cc | 287 - regexp2000/src/utils.h | 470 - regexp2000/src/v8-counters.cc | 56 - regexp2000/src/v8-counters.h | 158 - regexp2000/src/v8.cc | 111 - regexp2000/src/v8.h | 91 - regexp2000/src/v8natives.js | 535 - regexp2000/src/v8threads.cc | 332 - regexp2000/src/v8threads.h | 107 - regexp2000/src/variables.cc | 143 - regexp2000/src/variables.h | 145 - regexp2000/src/zone-inl.h | 53 - regexp2000/src/zone.cc | 171 - regexp2000/src/zone.h | 181 - regexp2000/test/cctest/SConscript | 65 - regexp2000/test/cctest/cctest.cc | 119 - regexp2000/test/cctest/cctest.h | 67 - regexp2000/test/cctest/cctest.status | 40 - regexp2000/test/cctest/test-api.cc | 5077 --------- regexp2000/test/cctest/test-assembler-arm.cc | 215 - regexp2000/test/cctest/test-assembler-ia32.cc | 376 - regexp2000/test/cctest/test-ast.cc | 95 - regexp2000/test/cctest/test-compiler.cc | 304 - regexp2000/test/cctest/test-conversions.cc | 130 - regexp2000/test/cctest/test-debug.cc | 3133 ------ regexp2000/test/cctest/test-decls.cc | 594 -- regexp2000/test/cctest/test-disasm-arm.cc | 272 - regexp2000/test/cctest/test-disasm-ia32.cc | 383 - regexp2000/test/cctest/test-flags.cc | 170 - regexp2000/test/cctest/test-hashmap.cc | 123 - regexp2000/test/cctest/test-heap.cc | 779 -- regexp2000/test/cctest/test-lock.cc | 40 - regexp2000/test/cctest/test-mark-compact.cc | 310 - regexp2000/test/cctest/test-platform-linux.cc | 80 - regexp2000/test/cctest/test-platform-macos.cc | 10 - .../test/cctest/test-platform-nullos.cc | 80 - regexp2000/test/cctest/test-platform-win32.cc | 26 - regexp2000/test/cctest/test-regexp.cc | 272 - regexp2000/test/cctest/test-serialize.cc | 266 - regexp2000/test/cctest/test-spaces.cc | 251 - regexp2000/test/cctest/test-strings.cc | 376 - regexp2000/test/cctest/test-utils.cc | 178 - regexp2000/test/cctest/testcfg.py | 89 - regexp2000/test/message/message.status | 31 - regexp2000/test/message/regress/regress-73.js | 33 - .../test/message/regress/regress-73.out | 30 - regexp2000/test/message/regress/regress-75.js | 32 - .../test/message/regress/regress-75.out | 30 - regexp2000/test/message/simple-throw.js | 28 - regexp2000/test/message/simple-throw.out | 30 - regexp2000/test/message/testcfg.py | 126 - .../message/try-catch-finally-no-message.js | 51 - .../message/try-catch-finally-no-message.out | 26 - ...atch-finally-throw-in-catch-and-finally.js | 34 - ...tch-finally-throw-in-catch-and-finally.out | 30 - .../try-catch-finally-throw-in-catch.js | 34 - .../try-catch-finally-throw-in-catch.out | 30 - .../try-catch-finally-throw-in-finally.js | 34 - .../try-catch-finally-throw-in-finally.out | 30 - .../message/try-finally-throw-in-finally.js | 32 - .../message/try-finally-throw-in-finally.out | 30 - .../try-finally-throw-in-try-and-finally.js | 32 - .../try-finally-throw-in-try-and-finally.out | 30 - .../test/message/try-finally-throw-in-try.js | 32 - .../test/message/try-finally-throw-in-try.out | 30 - .../api-call-after-bypassed-exception.js | 39 - regexp2000/test/mjsunit/apply.js | 184 - .../test/mjsunit/arguments-call-apply.js | 41 - regexp2000/test/mjsunit/arguments-enum.js | 52 - regexp2000/test/mjsunit/arguments-indirect.js | 47 - regexp2000/test/mjsunit/arguments-opt.js | 130 - regexp2000/test/mjsunit/arguments.js | 97 - regexp2000/test/mjsunit/array-concat.js | 101 - .../test/mjsunit/array-functions-prototype.js | 159 - regexp2000/test/mjsunit/array-indexing.js | 66 - regexp2000/test/mjsunit/array-iteration.js | 228 - regexp2000/test/mjsunit/array-join.js | 45 - regexp2000/test/mjsunit/array-length.js | 111 - regexp2000/test/mjsunit/array-sort.js | 154 - .../test/mjsunit/array-splice-webkit.js | 60 - regexp2000/test/mjsunit/array-splice.js | 313 - regexp2000/test/mjsunit/array_length.js | 53 - .../test/mjsunit/ascii-regexp-subject.js | 45 - .../mjsunit/binary-operation-overwrite.js | 36 - regexp2000/test/mjsunit/body-not-visible.js | 39 - regexp2000/test/mjsunit/bugs/bug-1231206.js | 39 - regexp2000/test/mjsunit/bugs/bug-1344252.js | 79 - regexp2000/test/mjsunit/bugs/bug-87.js | 29 - regexp2000/test/mjsunit/bugs/bug-900066.js | 38 - regexp2000/test/mjsunit/bugs/bug-941049.js | 100 - .../test/mjsunit/call-non-function-call.js | 38 - regexp2000/test/mjsunit/call-non-function.js | 54 - regexp2000/test/mjsunit/call.js | 87 - regexp2000/test/mjsunit/char-escape.js | 53 - regexp2000/test/mjsunit/class-of-builtins.js | 50 - regexp2000/test/mjsunit/closure.js | 37 - regexp2000/test/mjsunit/compare-nan.js | 44 - regexp2000/test/mjsunit/const-redecl.js | 220 - regexp2000/test/mjsunit/const.js | 68 - .../mjsunit/context-variable-assignments.js | 37 - .../test/mjsunit/cyclic-array-to-string.js | 65 - regexp2000/test/mjsunit/date-parse.js | 265 - regexp2000/test/mjsunit/date.js | 135 - .../test/mjsunit/debug-backtrace-text.js | 122 - regexp2000/test/mjsunit/debug-backtrace.js | 194 - regexp2000/test/mjsunit/debug-breakpoints.js | 120 - .../test/mjsunit/debug-changebreakpoint.js | 108 - .../test/mjsunit/debug-clearbreakpoint.js | 101 - .../mjsunit/debug-conditional-breakpoints.js | 171 - .../test/mjsunit/debug-constructed-by.js | 60 - regexp2000/test/mjsunit/debug-constructor.js | 78 - regexp2000/test/mjsunit/debug-continue.js | 113 - .../debug-enable-disable-breakpoints.js | 90 - .../test/mjsunit/debug-evaluate-arguments.js | 93 - .../test/mjsunit/debug-evaluate-locals.js | 132 - .../test/mjsunit/debug-evaluate-recursive.js | 165 - .../test/mjsunit/debug-evaluate-with.js | 77 - regexp2000/test/mjsunit/debug-evaluate.js | 117 - .../test/mjsunit/debug-event-listener.js | 73 - .../test/mjsunit/debug-ignore-breakpoints.js | 89 - .../mjsunit/debug-multiple-breakpoints.js | 105 - .../test/mjsunit/debug-referenced-by.js | 114 - .../test/mjsunit/debug-script-breakpoints.js | 71 - regexp2000/test/mjsunit/debug-script.js | 92 - .../test/mjsunit/debug-scripts-request.js | 95 - .../test/mjsunit/debug-setbreakpoint.js | 122 - regexp2000/test/mjsunit/debug-sourceinfo.js | 276 - regexp2000/test/mjsunit/debug-sourceslice.js | 74 - .../mjsunit/debug-step-stub-callfunction.js | 73 - regexp2000/test/mjsunit/debug-step.js | 84 - .../test/mjsunit/debug-stepin-constructor.js | 74 - regexp2000/test/mjsunit/declare-locally.js | 43 - regexp2000/test/mjsunit/deep-recursion.js | 64 - regexp2000/test/mjsunit/delay-syntax-error.js | 41 - .../test/mjsunit/delete-global-properties.js | 37 - regexp2000/test/mjsunit/delete-in-eval.js | 32 - regexp2000/test/mjsunit/delete-in-with.js | 34 - .../test/mjsunit/delete-vars-from-eval.js | 40 - regexp2000/test/mjsunit/delete.js | 163 - regexp2000/test/mjsunit/do-not-strip-fc.js | 31 - .../test/mjsunit/dont-enum-array-holes.js | 35 - .../test/mjsunit/dont-reinit-global-var.js | 47 - regexp2000/test/mjsunit/double-equals.js | 114 - regexp2000/test/mjsunit/dtoa.js | 32 - regexp2000/test/mjsunit/enumeration_order.js | 59 - regexp2000/test/mjsunit/escape.js | 118 - .../test/mjsunit/eval-typeof-non-existing.js | 32 - .../mjsunit/execScript-case-insensitive.js | 34 - regexp2000/test/mjsunit/extra-arguments.js | 54 - regexp2000/test/mjsunit/extra-commas.js | 46 - .../test/mjsunit/for-in-null-or-undefined.js | 33 - .../test/mjsunit/for-in-special-cases.js | 64 - regexp2000/test/mjsunit/for-in.js | 86 - regexp2000/test/mjsunit/fun-as-prototype.js | 36 - regexp2000/test/mjsunit/fun_name.js | 34 - .../test/mjsunit/function-arguments-null.js | 30 - regexp2000/test/mjsunit/function-caller.js | 48 - regexp2000/test/mjsunit/function-names.js | 133 - regexp2000/test/mjsunit/function-property.js | 29 - regexp2000/test/mjsunit/function-prototype.js | 97 - regexp2000/test/mjsunit/function-source.js | 49 - regexp2000/test/mjsunit/function.js | 83 - regexp2000/test/mjsunit/fuzz-accessors.js | 85 - regexp2000/test/mjsunit/fuzz-natives.js | 139 - .../test/mjsunit/getter-in-value-prototype.js | 35 - .../mjsunit/global-const-var-conflicts.js | 57 - regexp2000/test/mjsunit/global-vars-eval.js | 34 - regexp2000/test/mjsunit/global-vars-with.js | 43 - regexp2000/test/mjsunit/greedy.js | 60 - regexp2000/test/mjsunit/has-own-property.js | 38 - regexp2000/test/mjsunit/html-comments.js | 57 - regexp2000/test/mjsunit/html-string-funcs.js | 47 - regexp2000/test/mjsunit/if-in-undefined.js | 36 - regexp2000/test/mjsunit/in.js | 159 - regexp2000/test/mjsunit/instanceof.js | 93 - regexp2000/test/mjsunit/integer-to-string.js | 35 - regexp2000/test/mjsunit/invalid-lhs.js | 68 - regexp2000/test/mjsunit/keyed-ic.js | 207 - .../test/mjsunit/keyed-storage-extend.js | 55 - .../test/mjsunit/large-object-allocation.js | 300 - .../test/mjsunit/large-object-literal.js | 49 - regexp2000/test/mjsunit/lazy-load.js | 34 - regexp2000/test/mjsunit/leakcheck.js | 53 - regexp2000/test/mjsunit/length.js | 78 - regexp2000/test/mjsunit/math-min-max.js | 72 - .../test/mjsunit/megamorphic-callbacks.js | 70 - regexp2000/test/mjsunit/mirror-array.js | 109 - regexp2000/test/mjsunit/mirror-boolean.js | 58 - regexp2000/test/mjsunit/mirror-date.js | 74 - regexp2000/test/mjsunit/mirror-error.js | 68 - regexp2000/test/mjsunit/mirror-function.js | 76 - regexp2000/test/mjsunit/mirror-null.js | 49 - regexp2000/test/mjsunit/mirror-number.js | 68 - regexp2000/test/mjsunit/mirror-object.js | 178 - regexp2000/test/mjsunit/mirror-regexp.js | 94 - regexp2000/test/mjsunit/mirror-string.js | 69 - regexp2000/test/mjsunit/mirror-undefined.js | 49 - .../mjsunit/mirror-unresolved-function.js | 61 - regexp2000/test/mjsunit/mjsunit.js | 125 - regexp2000/test/mjsunit/mjsunit.status | 63 - regexp2000/test/mjsunit/mul-exhaustive.js | 4511 -------- regexp2000/test/mjsunit/negate-zero.js | 42 - regexp2000/test/mjsunit/negate.js | 59 - .../nested-repetition-count-overflow.js | 43 - regexp2000/test/mjsunit/new.js | 56 - regexp2000/test/mjsunit/newline-in-string.js | 46 - .../test/mjsunit/no-branch-elimination.js | 36 - .../mjsunit/no-octal-constants-above-256.js | 32 - regexp2000/test/mjsunit/no-semicolon.js | 45 - regexp2000/test/mjsunit/non-ascii-replace.js | 30 - regexp2000/test/mjsunit/nul-characters.js | 38 - regexp2000/test/mjsunit/number-limits.js | 43 - .../test/mjsunit/number-string-index-call.js | 32 - .../test/mjsunit/number-tostring-small.js | 395 - regexp2000/test/mjsunit/number-tostring.js | 338 - regexp2000/test/mjsunit/obj-construct.js | 46 - regexp2000/test/mjsunit/parse-int-float.js | 82 - .../test/mjsunit/property-object-key.js | 36 - regexp2000/test/mjsunit/proto.js | 33 - regexp2000/test/mjsunit/prototype.js | 93 - regexp2000/test/mjsunit/regexp-indexof.js | 60 - .../mjsunit/regexp-multiline-stack-trace.js | 114 - regexp2000/test/mjsunit/regexp-multiline.js | 112 - regexp2000/test/mjsunit/regexp-standalones.js | 78 - regexp2000/test/mjsunit/regexp-static.js | 122 - regexp2000/test/mjsunit/regexp.js | 243 - .../test/mjsunit/regress/regress-1030466.js | 45 - .../test/mjsunit/regress/regress-1036894.js | 38 - .../test/mjsunit/regress/regress-1039610.js | 29 - .../test/mjsunit/regress/regress-1050043.js | 51 - .../test/mjsunit/regress/regress-1062422.js | 30 - .../test/mjsunit/regress/regress-1066899.js | 37 - .../test/mjsunit/regress/regress-1081309.js | 91 - .../test/mjsunit/regress/regress-1102760.js | 35 - .../test/mjsunit/regress/regress-1110164.js | 46 - .../test/mjsunit/regress/regress-1112051.js | 33 - .../test/mjsunit/regress/regress-1114040.js | 58 - .../test/mjsunit/regress/regress-1134697.js | 31 - .../test/mjsunit/regress/regress-114.js | 43 - .../test/mjsunit/regress/regress-116.js | 40 - .../test/mjsunit/regress/regress-1170187.js | 80 - .../test/mjsunit/regress/regress-1173979.js | 48 - .../test/mjsunit/regress/regress-1175390.js | 30 - .../test/mjsunit/regress/regress-1177518.js | 39 - .../test/mjsunit/regress/regress-1177809.js | 31 - .../test/mjsunit/regress/regress-1178598.js | 90 - .../test/mjsunit/regress/regress-1182832.js | 38 - .../test/mjsunit/regress/regress-1187524.js | 34 - .../test/mjsunit/regress/regress-1199401.js | 61 - .../test/mjsunit/regress/regress-1199637.js | 78 - .../test/mjsunit/regress/regress-1200351.js | 2032 ---- .../test/mjsunit/regress/regress-1201933.js | 40 - .../test/mjsunit/regress/regress-1203459.js | 29 - .../test/mjsunit/regress/regress-1207276.js | 36 - .../test/mjsunit/regress/regress-1213516.js | 40 - .../test/mjsunit/regress/regress-1213575.js | 41 - .../test/mjsunit/regress/regress-1215653.js | 365 - .../test/mjsunit/regress/regress-124.js | 57 - .../test/mjsunit/regress/regress-1254366.js | 38 - .../test/mjsunit/regress/regress-1327557.js | 36 - .../test/mjsunit/regress/regress-1341167.js | 33 - .../test/mjsunit/regress/regress-1346700.js | 29 - .../test/mjsunit/regress/regress-1439135.js | 40 - .../test/mjsunit/regress/regress-20070207.js | 42 - regexp2000/test/mjsunit/regress/regress-35.js | 33 - regexp2000/test/mjsunit/regress/regress-57.js | 32 - .../test/mjsunit/regress/regress-588599.js | 31 - .../test/mjsunit/regress/regress-662254.js | 40 - .../test/mjsunit/regress/regress-666721.js | 53 - .../test/mjsunit/regress/regress-667061.js | 90 - .../test/mjsunit/regress/regress-670147.js | 34 - .../test/mjsunit/regress/regress-674753.js | 87 - .../test/mjsunit/regress/regress-676025.js | 31 - .../test/mjsunit/regress/regress-678525.js | 59 - .../test/mjsunit/regress/regress-682649.js | 30 - regexp2000/test/mjsunit/regress/regress-69.js | 43 - .../test/mjsunit/regress/regress-734862.js | 37 - .../test/mjsunit/regress/regress-737588.js | 34 - .../test/mjsunit/regress/regress-780423.js | 39 - .../test/mjsunit/regress/regress-799761.js | 92 - .../test/mjsunit/regress/regress-806473.js | 60 - .../test/mjsunit/regress/regress-842017.js | 60 - regexp2000/test/mjsunit/regress/regress-86.js | 46 - .../test/mjsunit/regress/regress-874178.js | 32 - .../test/mjsunit/regress/regress-875031.js | 37 - .../test/mjsunit/regress/regress-877615.js | 37 - .../test/mjsunit/regress/regress-892742.js | 50 - .../test/mjsunit/regress/regress-900055.js | 42 - .../test/mjsunit/regress/regress-900966.js | 38 - .../test/mjsunit/regress/regress-925537.js | 42 - .../test/mjsunit/regress/regress-937896.js | 50 - .../test/mjsunit/regress/regress-990205.js | 35 - .../test/mjsunit/regress/regress-992733.js | 35 - .../test/mjsunit/regress/regress-996542.js | 40 - .../test/mjsunit/regress/regress-998565.js | 51 - regexp2000/test/mjsunit/scanner.js | 30 - regexp2000/test/mjsunit/smi-negative-zero.js | 100 - regexp2000/test/mjsunit/smi-ops.js | 102 - .../test/mjsunit/sparse-array-reverse.js | 123 - regexp2000/test/mjsunit/sparse-array.js | 41 - regexp2000/test/mjsunit/str-to-num.js | 158 - regexp2000/test/mjsunit/stress-array-push.js | 34 - regexp2000/test/mjsunit/strict-equals.js | 90 - regexp2000/test/mjsunit/string-case.js | 28 - regexp2000/test/mjsunit/string-charat.js | 53 - regexp2000/test/mjsunit/string-charcodeat.js | 189 - regexp2000/test/mjsunit/string-flatten.js | 37 - regexp2000/test/mjsunit/string-index.js | 154 - regexp2000/test/mjsunit/string-indexof.js | 142 - regexp2000/test/mjsunit/string-lastindexof.js | 51 - .../test/mjsunit/string-localecompare.js | 40 - regexp2000/test/mjsunit/string-search.js | 30 - regexp2000/test/mjsunit/string-split.js | 126 - regexp2000/test/mjsunit/substr.js | 65 - regexp2000/test/mjsunit/switch.js | 227 - regexp2000/test/mjsunit/testcfg.py | 98 - regexp2000/test/mjsunit/this-in-callbacks.js | 47 - regexp2000/test/mjsunit/this.js | 46 - .../throw-exception-for-null-access.js | 37 - regexp2000/test/mjsunit/to-precision.js | 82 - regexp2000/test/mjsunit/tobool.js | 36 - regexp2000/test/mjsunit/toint32.js | 80 - regexp2000/test/mjsunit/touint32.js | 72 - regexp2000/test/mjsunit/try-finally-nested.js | 46 - regexp2000/test/mjsunit/try.js | 349 - regexp2000/test/mjsunit/try_catch_scopes.js | 42 - .../test/mjsunit/unicode-string-to-number.js | 46 - regexp2000/test/mjsunit/unicode-test.js | 9143 ----------------- .../test/mjsunit/unusual-constructor.js | 38 - regexp2000/test/mjsunit/uri.js | 78 - .../mjsunit/value-callic-prototype-change.js | 94 - regexp2000/test/mjsunit/var.js | 37 - .../test/mjsunit/with-function-expression.js | 36 - regexp2000/test/mjsunit/with-leave.js | 61 - .../test/mjsunit/with-parameter-access.js | 47 - regexp2000/test/mjsunit/with-value.js | 38 - regexp2000/test/mozilla/mozilla.status | 801 -- regexp2000/test/mozilla/testcfg.py | 134 - regexp2000/tools/js2c.py | 357 - regexp2000/tools/linux-tick-processor.py | 86 - regexp2000/tools/presubmit.py | 229 - regexp2000/tools/splaytree.py | 219 - regexp2000/tools/test.py | 1255 --- regexp2000/tools/tickprocessor.py | 206 - regexp2000/tools/utils.py | 53 - regexp2000/tools/v8.xcodeproj/project.pbxproj | 1480 --- regexp2000/tools/visual_studio/README.txt | 65 - regexp2000/tools/visual_studio/common.vsprops | 37 - regexp2000/tools/visual_studio/d8.vcproj | 185 - regexp2000/tools/visual_studio/d8js2c.cmd | 6 - regexp2000/tools/visual_studio/debug.vsprops | 17 - regexp2000/tools/visual_studio/js2c.cmd | 6 - .../tools/visual_studio/release.vsprops | 24 - regexp2000/tools/visual_studio/v8.sln | 92 - regexp2000/tools/visual_studio/v8.vcproj | 219 - regexp2000/tools/visual_studio/v8_base.vcproj | 931 -- .../tools/visual_studio/v8_cctest.vcproj | 221 - .../tools/visual_studio/v8_mksnapshot.vcproj | 149 - .../visual_studio/v8_process_sample.vcproj | 149 - .../visual_studio/v8_shell_sample.vcproj | 149 - .../tools/visual_studio/v8_snapshot.vcproj | 183 - regexp2000/tools/windows-tick-processor.py | 140 - 580 files changed, 209265 deletions(-) delete mode 100644 regexp2000/AUTHORS delete mode 100644 regexp2000/ChangeLog delete mode 100644 regexp2000/LICENSE delete mode 100644 regexp2000/SConstruct delete mode 100644 regexp2000/benchmarks/README.txt delete mode 100644 regexp2000/benchmarks/base.js delete mode 100644 regexp2000/benchmarks/crypto.js delete mode 100644 regexp2000/benchmarks/deltablue.js delete mode 100644 regexp2000/benchmarks/earley-boyer.js delete mode 100644 regexp2000/benchmarks/raytrace.js delete mode 100644 regexp2000/benchmarks/richards.js delete mode 100644 regexp2000/benchmarks/run.html delete mode 100644 regexp2000/benchmarks/run.js delete mode 100644 regexp2000/benchmarks/v8-logo.png delete mode 100644 regexp2000/include/v8-debug.h delete mode 100644 regexp2000/include/v8.h delete mode 100644 regexp2000/samples/SConscript delete mode 100644 regexp2000/samples/count-hosts.js delete mode 100644 regexp2000/samples/process.cc delete mode 100644 regexp2000/samples/shell.cc delete mode 100644 regexp2000/src/SConscript delete mode 100644 regexp2000/src/accessors.cc delete mode 100644 regexp2000/src/accessors.h delete mode 100644 regexp2000/src/allocation.cc delete mode 100644 regexp2000/src/allocation.h delete mode 100644 regexp2000/src/api.cc delete mode 100644 regexp2000/src/api.h delete mode 100644 regexp2000/src/apinatives.js delete mode 100644 regexp2000/src/arguments.h delete mode 100644 regexp2000/src/array.js delete mode 100644 regexp2000/src/assembler-arm-inl.h delete mode 100644 regexp2000/src/assembler-arm.cc delete mode 100644 regexp2000/src/assembler-arm.h delete mode 100644 regexp2000/src/assembler-ia32-inl.h delete mode 100644 regexp2000/src/assembler-ia32.cc delete mode 100644 regexp2000/src/assembler-ia32.h delete mode 100644 regexp2000/src/assembler.cc delete mode 100644 regexp2000/src/assembler.h delete mode 100644 regexp2000/src/ast.cc delete mode 100644 regexp2000/src/ast.h delete mode 100644 regexp2000/src/bootstrapper.cc delete mode 100644 regexp2000/src/bootstrapper.h delete mode 100644 regexp2000/src/builtins-arm.cc delete mode 100644 regexp2000/src/builtins-ia32.cc delete mode 100644 regexp2000/src/builtins.cc delete mode 100644 regexp2000/src/builtins.h delete mode 100644 regexp2000/src/char-predicates-inl.h delete mode 100644 regexp2000/src/char-predicates.h delete mode 100644 regexp2000/src/checks.cc delete mode 100644 regexp2000/src/checks.h delete mode 100644 regexp2000/src/code-stubs.cc delete mode 100644 regexp2000/src/code-stubs.h delete mode 100644 regexp2000/src/code.h delete mode 100644 regexp2000/src/codegen-arm.cc delete mode 100644 regexp2000/src/codegen-arm.h delete mode 100644 regexp2000/src/codegen-ia32.cc delete mode 100644 regexp2000/src/codegen-ia32.h delete mode 100644 regexp2000/src/codegen-inl.h delete mode 100644 regexp2000/src/codegen.cc delete mode 100644 regexp2000/src/codegen.h delete mode 100644 regexp2000/src/compilation-cache.cc delete mode 100644 regexp2000/src/compilation-cache.h delete mode 100644 regexp2000/src/compiler.cc delete mode 100644 regexp2000/src/compiler.h delete mode 100644 regexp2000/src/constants-arm.h delete mode 100644 regexp2000/src/contexts.cc delete mode 100644 regexp2000/src/contexts.h delete mode 100644 regexp2000/src/conversions-inl.h delete mode 100644 regexp2000/src/conversions.cc delete mode 100644 regexp2000/src/conversions.h delete mode 100644 regexp2000/src/counters.cc delete mode 100644 regexp2000/src/counters.h delete mode 100644 regexp2000/src/cpu-arm.cc delete mode 100644 regexp2000/src/cpu-ia32.cc delete mode 100644 regexp2000/src/cpu.h delete mode 100644 regexp2000/src/d8-readline.cc delete mode 100644 regexp2000/src/d8.cc delete mode 100644 regexp2000/src/d8.h delete mode 100644 regexp2000/src/d8.js delete mode 100644 regexp2000/src/date-delay.js delete mode 100644 regexp2000/src/dateparser.cc delete mode 100644 regexp2000/src/dateparser.h delete mode 100644 regexp2000/src/debug-delay.js delete mode 100644 regexp2000/src/debug.cc delete mode 100644 regexp2000/src/debug.h delete mode 100644 regexp2000/src/disasm-arm.cc delete mode 100644 regexp2000/src/disasm-ia32.cc delete mode 100644 regexp2000/src/disasm.h delete mode 100644 regexp2000/src/disassembler.cc delete mode 100644 regexp2000/src/disassembler.h delete mode 100644 regexp2000/src/dtoa-config.c delete mode 100644 regexp2000/src/execution.cc delete mode 100644 regexp2000/src/execution.h delete mode 100644 regexp2000/src/factory.cc delete mode 100644 regexp2000/src/factory.h delete mode 100644 regexp2000/src/flag-definitions.h delete mode 100644 regexp2000/src/flags.cc delete mode 100644 regexp2000/src/flags.h delete mode 100644 regexp2000/src/frames-arm.cc delete mode 100644 regexp2000/src/frames-arm.h delete mode 100644 regexp2000/src/frames-ia32.cc delete mode 100644 regexp2000/src/frames-ia32.h delete mode 100644 regexp2000/src/frames-inl.h delete mode 100644 regexp2000/src/frames.cc delete mode 100644 regexp2000/src/frames.h delete mode 100644 regexp2000/src/global-handles.cc delete mode 100644 regexp2000/src/global-handles.h delete mode 100644 regexp2000/src/globals.h delete mode 100644 regexp2000/src/handles-inl.h delete mode 100644 regexp2000/src/handles.cc delete mode 100644 regexp2000/src/handles.h delete mode 100644 regexp2000/src/hashmap.cc delete mode 100644 regexp2000/src/hashmap.h delete mode 100644 regexp2000/src/heap-inl.h delete mode 100644 regexp2000/src/heap.cc delete mode 100644 regexp2000/src/heap.h delete mode 100644 regexp2000/src/ic-arm.cc delete mode 100644 regexp2000/src/ic-ia32.cc delete mode 100644 regexp2000/src/ic-inl.h delete mode 100644 regexp2000/src/ic.cc delete mode 100644 regexp2000/src/ic.h delete mode 100644 regexp2000/src/jsregexp.cc delete mode 100644 regexp2000/src/jsregexp.h delete mode 100644 regexp2000/src/list-inl.h delete mode 100644 regexp2000/src/list.h delete mode 100644 regexp2000/src/log.cc delete mode 100644 regexp2000/src/log.h delete mode 100644 regexp2000/src/macro-assembler-arm.cc delete mode 100644 regexp2000/src/macro-assembler-arm.h delete mode 100644 regexp2000/src/macro-assembler-ia32.cc delete mode 100644 regexp2000/src/macro-assembler-ia32.h delete mode 100644 regexp2000/src/macro-assembler.h delete mode 100644 regexp2000/src/macros.py delete mode 100644 regexp2000/src/mark-compact.cc delete mode 100644 regexp2000/src/mark-compact.h delete mode 100644 regexp2000/src/math.js delete mode 100644 regexp2000/src/memory.h delete mode 100644 regexp2000/src/messages.cc delete mode 100644 regexp2000/src/messages.h delete mode 100644 regexp2000/src/messages.js delete mode 100644 regexp2000/src/mirror-delay.js delete mode 100644 regexp2000/src/mksnapshot.cc delete mode 100644 regexp2000/src/natives.h delete mode 100644 regexp2000/src/objects-debug.cc delete mode 100644 regexp2000/src/objects-inl.h delete mode 100644 regexp2000/src/objects.cc delete mode 100644 regexp2000/src/objects.h delete mode 100644 regexp2000/src/parser.cc delete mode 100644 regexp2000/src/parser.h delete mode 100644 regexp2000/src/platform-linux.cc delete mode 100644 regexp2000/src/platform-macos.cc delete mode 100644 regexp2000/src/platform-nullos.cc delete mode 100644 regexp2000/src/platform-win32.cc delete mode 100644 regexp2000/src/platform.h delete mode 100644 regexp2000/src/prettyprinter.cc delete mode 100644 regexp2000/src/prettyprinter.h delete mode 100644 regexp2000/src/property.cc delete mode 100644 regexp2000/src/property.h delete mode 100644 regexp2000/src/regexp-delay.js delete mode 100644 regexp2000/src/rewriter.cc delete mode 100644 regexp2000/src/rewriter.h delete mode 100644 regexp2000/src/runtime.cc delete mode 100644 regexp2000/src/runtime.h delete mode 100644 regexp2000/src/runtime.js delete mode 100644 regexp2000/src/scanner.cc delete mode 100644 regexp2000/src/scanner.h delete mode 100644 regexp2000/src/scopeinfo.cc delete mode 100644 regexp2000/src/scopeinfo.h delete mode 100644 regexp2000/src/scopes.cc delete mode 100644 regexp2000/src/scopes.h delete mode 100644 regexp2000/src/serialize.cc delete mode 100644 regexp2000/src/serialize.h delete mode 100644 regexp2000/src/shell.h delete mode 100644 regexp2000/src/simulator-arm.cc delete mode 100644 regexp2000/src/simulator-arm.h delete mode 100644 regexp2000/src/simulator-ia32.cc delete mode 100644 regexp2000/src/simulator-ia32.h delete mode 100644 regexp2000/src/smart-pointer.h delete mode 100644 regexp2000/src/snapshot-common.cc delete mode 100644 regexp2000/src/snapshot-empty.cc delete mode 100644 regexp2000/src/snapshot.h delete mode 100644 regexp2000/src/spaces-inl.h delete mode 100644 regexp2000/src/spaces.cc delete mode 100644 regexp2000/src/spaces.h delete mode 100644 regexp2000/src/string-stream.cc delete mode 100644 regexp2000/src/string-stream.h delete mode 100644 regexp2000/src/string.js delete mode 100644 regexp2000/src/stub-cache-arm.cc delete mode 100644 regexp2000/src/stub-cache-ia32.cc delete mode 100644 regexp2000/src/stub-cache.cc delete mode 100644 regexp2000/src/stub-cache.h delete mode 100644 regexp2000/src/third_party/dtoa/COPYING delete mode 100644 regexp2000/src/third_party/dtoa/dtoa.c delete mode 100644 regexp2000/src/third_party/jscre/ASCIICType.h delete mode 100644 regexp2000/src/third_party/jscre/AUTHORS delete mode 100644 regexp2000/src/third_party/jscre/COPYING delete mode 100644 regexp2000/src/third_party/jscre/LICENSE delete mode 100644 regexp2000/src/third_party/jscre/config.h delete mode 100644 regexp2000/src/third_party/jscre/pcre.h delete mode 100644 regexp2000/src/third_party/jscre/pcre_chartables.c delete mode 100644 regexp2000/src/third_party/jscre/pcre_compile.cpp delete mode 100644 regexp2000/src/third_party/jscre/pcre_exec.cpp delete mode 100644 regexp2000/src/third_party/jscre/pcre_internal.h delete mode 100644 regexp2000/src/third_party/jscre/pcre_tables.cpp delete mode 100644 regexp2000/src/third_party/jscre/pcre_ucp_searchfuncs.cpp delete mode 100644 regexp2000/src/third_party/jscre/pcre_xclass.cpp delete mode 100644 regexp2000/src/third_party/jscre/ucpinternal.h delete mode 100644 regexp2000/src/third_party/jscre/ucptable.cpp delete mode 100644 regexp2000/src/token.cc delete mode 100644 regexp2000/src/token.h delete mode 100644 regexp2000/src/top.cc delete mode 100644 regexp2000/src/top.h delete mode 100644 regexp2000/src/unicode-inl.h delete mode 100644 regexp2000/src/unicode.cc delete mode 100644 regexp2000/src/unicode.h delete mode 100644 regexp2000/src/uri.js delete mode 100644 regexp2000/src/usage-analyzer.cc delete mode 100644 regexp2000/src/usage-analyzer.h delete mode 100644 regexp2000/src/utils.cc delete mode 100644 regexp2000/src/utils.h delete mode 100644 regexp2000/src/v8-counters.cc delete mode 100644 regexp2000/src/v8-counters.h delete mode 100644 regexp2000/src/v8.cc delete mode 100644 regexp2000/src/v8.h delete mode 100644 regexp2000/src/v8natives.js delete mode 100644 regexp2000/src/v8threads.cc delete mode 100644 regexp2000/src/v8threads.h delete mode 100644 regexp2000/src/variables.cc delete mode 100644 regexp2000/src/variables.h delete mode 100644 regexp2000/src/zone-inl.h delete mode 100644 regexp2000/src/zone.cc delete mode 100644 regexp2000/src/zone.h delete mode 100644 regexp2000/test/cctest/SConscript delete mode 100644 regexp2000/test/cctest/cctest.cc delete mode 100644 regexp2000/test/cctest/cctest.h delete mode 100644 regexp2000/test/cctest/cctest.status delete mode 100644 regexp2000/test/cctest/test-api.cc delete mode 100644 regexp2000/test/cctest/test-assembler-arm.cc delete mode 100644 regexp2000/test/cctest/test-assembler-ia32.cc delete mode 100644 regexp2000/test/cctest/test-ast.cc delete mode 100644 regexp2000/test/cctest/test-compiler.cc delete mode 100644 regexp2000/test/cctest/test-conversions.cc delete mode 100644 regexp2000/test/cctest/test-debug.cc delete mode 100644 regexp2000/test/cctest/test-decls.cc delete mode 100644 regexp2000/test/cctest/test-disasm-arm.cc delete mode 100644 regexp2000/test/cctest/test-disasm-ia32.cc delete mode 100644 regexp2000/test/cctest/test-flags.cc delete mode 100644 regexp2000/test/cctest/test-hashmap.cc delete mode 100644 regexp2000/test/cctest/test-heap.cc delete mode 100644 regexp2000/test/cctest/test-lock.cc delete mode 100644 regexp2000/test/cctest/test-mark-compact.cc delete mode 100644 regexp2000/test/cctest/test-platform-linux.cc delete mode 100644 regexp2000/test/cctest/test-platform-macos.cc delete mode 100644 regexp2000/test/cctest/test-platform-nullos.cc delete mode 100644 regexp2000/test/cctest/test-platform-win32.cc delete mode 100644 regexp2000/test/cctest/test-regexp.cc delete mode 100644 regexp2000/test/cctest/test-serialize.cc delete mode 100644 regexp2000/test/cctest/test-spaces.cc delete mode 100644 regexp2000/test/cctest/test-strings.cc delete mode 100644 regexp2000/test/cctest/test-utils.cc delete mode 100644 regexp2000/test/cctest/testcfg.py delete mode 100644 regexp2000/test/message/message.status delete mode 100644 regexp2000/test/message/regress/regress-73.js delete mode 100644 regexp2000/test/message/regress/regress-73.out delete mode 100644 regexp2000/test/message/regress/regress-75.js delete mode 100644 regexp2000/test/message/regress/regress-75.out delete mode 100644 regexp2000/test/message/simple-throw.js delete mode 100644 regexp2000/test/message/simple-throw.out delete mode 100644 regexp2000/test/message/testcfg.py delete mode 100644 regexp2000/test/message/try-catch-finally-no-message.js delete mode 100644 regexp2000/test/message/try-catch-finally-no-message.out delete mode 100644 regexp2000/test/message/try-catch-finally-throw-in-catch-and-finally.js delete mode 100644 regexp2000/test/message/try-catch-finally-throw-in-catch-and-finally.out delete mode 100644 regexp2000/test/message/try-catch-finally-throw-in-catch.js delete mode 100644 regexp2000/test/message/try-catch-finally-throw-in-catch.out delete mode 100644 regexp2000/test/message/try-catch-finally-throw-in-finally.js delete mode 100644 regexp2000/test/message/try-catch-finally-throw-in-finally.out delete mode 100644 regexp2000/test/message/try-finally-throw-in-finally.js delete mode 100644 regexp2000/test/message/try-finally-throw-in-finally.out delete mode 100644 regexp2000/test/message/try-finally-throw-in-try-and-finally.js delete mode 100644 regexp2000/test/message/try-finally-throw-in-try-and-finally.out delete mode 100644 regexp2000/test/message/try-finally-throw-in-try.js delete mode 100644 regexp2000/test/message/try-finally-throw-in-try.out delete mode 100644 regexp2000/test/mjsunit/api-call-after-bypassed-exception.js delete mode 100644 regexp2000/test/mjsunit/apply.js delete mode 100644 regexp2000/test/mjsunit/arguments-call-apply.js delete mode 100644 regexp2000/test/mjsunit/arguments-enum.js delete mode 100644 regexp2000/test/mjsunit/arguments-indirect.js delete mode 100644 regexp2000/test/mjsunit/arguments-opt.js delete mode 100644 regexp2000/test/mjsunit/arguments.js delete mode 100644 regexp2000/test/mjsunit/array-concat.js delete mode 100644 regexp2000/test/mjsunit/array-functions-prototype.js delete mode 100644 regexp2000/test/mjsunit/array-indexing.js delete mode 100644 regexp2000/test/mjsunit/array-iteration.js delete mode 100644 regexp2000/test/mjsunit/array-join.js delete mode 100644 regexp2000/test/mjsunit/array-length.js delete mode 100644 regexp2000/test/mjsunit/array-sort.js delete mode 100644 regexp2000/test/mjsunit/array-splice-webkit.js delete mode 100644 regexp2000/test/mjsunit/array-splice.js delete mode 100644 regexp2000/test/mjsunit/array_length.js delete mode 100644 regexp2000/test/mjsunit/ascii-regexp-subject.js delete mode 100644 regexp2000/test/mjsunit/binary-operation-overwrite.js delete mode 100644 regexp2000/test/mjsunit/body-not-visible.js delete mode 100644 regexp2000/test/mjsunit/bugs/bug-1231206.js delete mode 100644 regexp2000/test/mjsunit/bugs/bug-1344252.js delete mode 100644 regexp2000/test/mjsunit/bugs/bug-87.js delete mode 100644 regexp2000/test/mjsunit/bugs/bug-900066.js delete mode 100644 regexp2000/test/mjsunit/bugs/bug-941049.js delete mode 100644 regexp2000/test/mjsunit/call-non-function-call.js delete mode 100644 regexp2000/test/mjsunit/call-non-function.js delete mode 100644 regexp2000/test/mjsunit/call.js delete mode 100644 regexp2000/test/mjsunit/char-escape.js delete mode 100644 regexp2000/test/mjsunit/class-of-builtins.js delete mode 100644 regexp2000/test/mjsunit/closure.js delete mode 100644 regexp2000/test/mjsunit/compare-nan.js delete mode 100644 regexp2000/test/mjsunit/const-redecl.js delete mode 100644 regexp2000/test/mjsunit/const.js delete mode 100644 regexp2000/test/mjsunit/context-variable-assignments.js delete mode 100644 regexp2000/test/mjsunit/cyclic-array-to-string.js delete mode 100644 regexp2000/test/mjsunit/date-parse.js delete mode 100644 regexp2000/test/mjsunit/date.js delete mode 100644 regexp2000/test/mjsunit/debug-backtrace-text.js delete mode 100644 regexp2000/test/mjsunit/debug-backtrace.js delete mode 100644 regexp2000/test/mjsunit/debug-breakpoints.js delete mode 100644 regexp2000/test/mjsunit/debug-changebreakpoint.js delete mode 100644 regexp2000/test/mjsunit/debug-clearbreakpoint.js delete mode 100644 regexp2000/test/mjsunit/debug-conditional-breakpoints.js delete mode 100644 regexp2000/test/mjsunit/debug-constructed-by.js delete mode 100644 regexp2000/test/mjsunit/debug-constructor.js delete mode 100644 regexp2000/test/mjsunit/debug-continue.js delete mode 100644 regexp2000/test/mjsunit/debug-enable-disable-breakpoints.js delete mode 100644 regexp2000/test/mjsunit/debug-evaluate-arguments.js delete mode 100644 regexp2000/test/mjsunit/debug-evaluate-locals.js delete mode 100644 regexp2000/test/mjsunit/debug-evaluate-recursive.js delete mode 100644 regexp2000/test/mjsunit/debug-evaluate-with.js delete mode 100644 regexp2000/test/mjsunit/debug-evaluate.js delete mode 100644 regexp2000/test/mjsunit/debug-event-listener.js delete mode 100644 regexp2000/test/mjsunit/debug-ignore-breakpoints.js delete mode 100644 regexp2000/test/mjsunit/debug-multiple-breakpoints.js delete mode 100644 regexp2000/test/mjsunit/debug-referenced-by.js delete mode 100644 regexp2000/test/mjsunit/debug-script-breakpoints.js delete mode 100644 regexp2000/test/mjsunit/debug-script.js delete mode 100644 regexp2000/test/mjsunit/debug-scripts-request.js delete mode 100644 regexp2000/test/mjsunit/debug-setbreakpoint.js delete mode 100644 regexp2000/test/mjsunit/debug-sourceinfo.js delete mode 100644 regexp2000/test/mjsunit/debug-sourceslice.js delete mode 100644 regexp2000/test/mjsunit/debug-step-stub-callfunction.js delete mode 100644 regexp2000/test/mjsunit/debug-step.js delete mode 100644 regexp2000/test/mjsunit/debug-stepin-constructor.js delete mode 100644 regexp2000/test/mjsunit/declare-locally.js delete mode 100644 regexp2000/test/mjsunit/deep-recursion.js delete mode 100644 regexp2000/test/mjsunit/delay-syntax-error.js delete mode 100644 regexp2000/test/mjsunit/delete-global-properties.js delete mode 100644 regexp2000/test/mjsunit/delete-in-eval.js delete mode 100644 regexp2000/test/mjsunit/delete-in-with.js delete mode 100644 regexp2000/test/mjsunit/delete-vars-from-eval.js delete mode 100644 regexp2000/test/mjsunit/delete.js delete mode 100644 regexp2000/test/mjsunit/do-not-strip-fc.js delete mode 100644 regexp2000/test/mjsunit/dont-enum-array-holes.js delete mode 100644 regexp2000/test/mjsunit/dont-reinit-global-var.js delete mode 100644 regexp2000/test/mjsunit/double-equals.js delete mode 100644 regexp2000/test/mjsunit/dtoa.js delete mode 100644 regexp2000/test/mjsunit/enumeration_order.js delete mode 100644 regexp2000/test/mjsunit/escape.js delete mode 100644 regexp2000/test/mjsunit/eval-typeof-non-existing.js delete mode 100644 regexp2000/test/mjsunit/execScript-case-insensitive.js delete mode 100644 regexp2000/test/mjsunit/extra-arguments.js delete mode 100644 regexp2000/test/mjsunit/extra-commas.js delete mode 100644 regexp2000/test/mjsunit/for-in-null-or-undefined.js delete mode 100644 regexp2000/test/mjsunit/for-in-special-cases.js delete mode 100644 regexp2000/test/mjsunit/for-in.js delete mode 100644 regexp2000/test/mjsunit/fun-as-prototype.js delete mode 100644 regexp2000/test/mjsunit/fun_name.js delete mode 100644 regexp2000/test/mjsunit/function-arguments-null.js delete mode 100644 regexp2000/test/mjsunit/function-caller.js delete mode 100644 regexp2000/test/mjsunit/function-names.js delete mode 100644 regexp2000/test/mjsunit/function-property.js delete mode 100644 regexp2000/test/mjsunit/function-prototype.js delete mode 100644 regexp2000/test/mjsunit/function-source.js delete mode 100644 regexp2000/test/mjsunit/function.js delete mode 100644 regexp2000/test/mjsunit/fuzz-accessors.js delete mode 100644 regexp2000/test/mjsunit/fuzz-natives.js delete mode 100644 regexp2000/test/mjsunit/getter-in-value-prototype.js delete mode 100644 regexp2000/test/mjsunit/global-const-var-conflicts.js delete mode 100644 regexp2000/test/mjsunit/global-vars-eval.js delete mode 100644 regexp2000/test/mjsunit/global-vars-with.js delete mode 100644 regexp2000/test/mjsunit/greedy.js delete mode 100644 regexp2000/test/mjsunit/has-own-property.js delete mode 100644 regexp2000/test/mjsunit/html-comments.js delete mode 100644 regexp2000/test/mjsunit/html-string-funcs.js delete mode 100644 regexp2000/test/mjsunit/if-in-undefined.js delete mode 100644 regexp2000/test/mjsunit/in.js delete mode 100644 regexp2000/test/mjsunit/instanceof.js delete mode 100644 regexp2000/test/mjsunit/integer-to-string.js delete mode 100644 regexp2000/test/mjsunit/invalid-lhs.js delete mode 100644 regexp2000/test/mjsunit/keyed-ic.js delete mode 100644 regexp2000/test/mjsunit/keyed-storage-extend.js delete mode 100644 regexp2000/test/mjsunit/large-object-allocation.js delete mode 100644 regexp2000/test/mjsunit/large-object-literal.js delete mode 100644 regexp2000/test/mjsunit/lazy-load.js delete mode 100644 regexp2000/test/mjsunit/leakcheck.js delete mode 100644 regexp2000/test/mjsunit/length.js delete mode 100644 regexp2000/test/mjsunit/math-min-max.js delete mode 100644 regexp2000/test/mjsunit/megamorphic-callbacks.js delete mode 100644 regexp2000/test/mjsunit/mirror-array.js delete mode 100644 regexp2000/test/mjsunit/mirror-boolean.js delete mode 100644 regexp2000/test/mjsunit/mirror-date.js delete mode 100644 regexp2000/test/mjsunit/mirror-error.js delete mode 100644 regexp2000/test/mjsunit/mirror-function.js delete mode 100644 regexp2000/test/mjsunit/mirror-null.js delete mode 100644 regexp2000/test/mjsunit/mirror-number.js delete mode 100644 regexp2000/test/mjsunit/mirror-object.js delete mode 100644 regexp2000/test/mjsunit/mirror-regexp.js delete mode 100644 regexp2000/test/mjsunit/mirror-string.js delete mode 100644 regexp2000/test/mjsunit/mirror-undefined.js delete mode 100644 regexp2000/test/mjsunit/mirror-unresolved-function.js delete mode 100644 regexp2000/test/mjsunit/mjsunit.js delete mode 100644 regexp2000/test/mjsunit/mjsunit.status delete mode 100644 regexp2000/test/mjsunit/mul-exhaustive.js delete mode 100644 regexp2000/test/mjsunit/negate-zero.js delete mode 100644 regexp2000/test/mjsunit/negate.js delete mode 100644 regexp2000/test/mjsunit/nested-repetition-count-overflow.js delete mode 100644 regexp2000/test/mjsunit/new.js delete mode 100644 regexp2000/test/mjsunit/newline-in-string.js delete mode 100644 regexp2000/test/mjsunit/no-branch-elimination.js delete mode 100644 regexp2000/test/mjsunit/no-octal-constants-above-256.js delete mode 100644 regexp2000/test/mjsunit/no-semicolon.js delete mode 100644 regexp2000/test/mjsunit/non-ascii-replace.js delete mode 100644 regexp2000/test/mjsunit/nul-characters.js delete mode 100644 regexp2000/test/mjsunit/number-limits.js delete mode 100644 regexp2000/test/mjsunit/number-string-index-call.js delete mode 100644 regexp2000/test/mjsunit/number-tostring-small.js delete mode 100644 regexp2000/test/mjsunit/number-tostring.js delete mode 100644 regexp2000/test/mjsunit/obj-construct.js delete mode 100644 regexp2000/test/mjsunit/parse-int-float.js delete mode 100644 regexp2000/test/mjsunit/property-object-key.js delete mode 100644 regexp2000/test/mjsunit/proto.js delete mode 100644 regexp2000/test/mjsunit/prototype.js delete mode 100644 regexp2000/test/mjsunit/regexp-indexof.js delete mode 100644 regexp2000/test/mjsunit/regexp-multiline-stack-trace.js delete mode 100644 regexp2000/test/mjsunit/regexp-multiline.js delete mode 100644 regexp2000/test/mjsunit/regexp-standalones.js delete mode 100644 regexp2000/test/mjsunit/regexp-static.js delete mode 100644 regexp2000/test/mjsunit/regexp.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-1030466.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-1036894.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-1039610.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-1050043.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-1062422.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-1066899.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-1081309.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-1102760.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-1110164.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-1112051.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-1114040.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-1134697.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-114.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-116.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-1170187.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-1173979.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-1175390.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-1177518.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-1177809.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-1178598.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-1182832.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-1187524.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-1199401.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-1199637.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-1200351.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-1201933.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-1203459.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-1207276.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-1213516.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-1213575.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-1215653.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-124.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-1254366.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-1327557.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-1341167.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-1346700.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-1439135.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-20070207.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-35.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-57.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-588599.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-662254.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-666721.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-667061.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-670147.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-674753.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-676025.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-678525.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-682649.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-69.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-734862.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-737588.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-780423.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-799761.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-806473.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-842017.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-86.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-874178.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-875031.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-877615.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-892742.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-900055.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-900966.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-925537.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-937896.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-990205.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-992733.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-996542.js delete mode 100644 regexp2000/test/mjsunit/regress/regress-998565.js delete mode 100644 regexp2000/test/mjsunit/scanner.js delete mode 100644 regexp2000/test/mjsunit/smi-negative-zero.js delete mode 100644 regexp2000/test/mjsunit/smi-ops.js delete mode 100644 regexp2000/test/mjsunit/sparse-array-reverse.js delete mode 100644 regexp2000/test/mjsunit/sparse-array.js delete mode 100644 regexp2000/test/mjsunit/str-to-num.js delete mode 100644 regexp2000/test/mjsunit/stress-array-push.js delete mode 100644 regexp2000/test/mjsunit/strict-equals.js delete mode 100644 regexp2000/test/mjsunit/string-case.js delete mode 100644 regexp2000/test/mjsunit/string-charat.js delete mode 100644 regexp2000/test/mjsunit/string-charcodeat.js delete mode 100644 regexp2000/test/mjsunit/string-flatten.js delete mode 100644 regexp2000/test/mjsunit/string-index.js delete mode 100644 regexp2000/test/mjsunit/string-indexof.js delete mode 100644 regexp2000/test/mjsunit/string-lastindexof.js delete mode 100644 regexp2000/test/mjsunit/string-localecompare.js delete mode 100644 regexp2000/test/mjsunit/string-search.js delete mode 100644 regexp2000/test/mjsunit/string-split.js delete mode 100644 regexp2000/test/mjsunit/substr.js delete mode 100644 regexp2000/test/mjsunit/switch.js delete mode 100644 regexp2000/test/mjsunit/testcfg.py delete mode 100644 regexp2000/test/mjsunit/this-in-callbacks.js delete mode 100644 regexp2000/test/mjsunit/this.js delete mode 100644 regexp2000/test/mjsunit/throw-exception-for-null-access.js delete mode 100644 regexp2000/test/mjsunit/to-precision.js delete mode 100644 regexp2000/test/mjsunit/tobool.js delete mode 100644 regexp2000/test/mjsunit/toint32.js delete mode 100644 regexp2000/test/mjsunit/touint32.js delete mode 100644 regexp2000/test/mjsunit/try-finally-nested.js delete mode 100644 regexp2000/test/mjsunit/try.js delete mode 100644 regexp2000/test/mjsunit/try_catch_scopes.js delete mode 100644 regexp2000/test/mjsunit/unicode-string-to-number.js delete mode 100644 regexp2000/test/mjsunit/unicode-test.js delete mode 100644 regexp2000/test/mjsunit/unusual-constructor.js delete mode 100644 regexp2000/test/mjsunit/uri.js delete mode 100644 regexp2000/test/mjsunit/value-callic-prototype-change.js delete mode 100644 regexp2000/test/mjsunit/var.js delete mode 100644 regexp2000/test/mjsunit/with-function-expression.js delete mode 100644 regexp2000/test/mjsunit/with-leave.js delete mode 100644 regexp2000/test/mjsunit/with-parameter-access.js delete mode 100644 regexp2000/test/mjsunit/with-value.js delete mode 100644 regexp2000/test/mozilla/mozilla.status delete mode 100644 regexp2000/test/mozilla/testcfg.py delete mode 100755 regexp2000/tools/js2c.py delete mode 100755 regexp2000/tools/linux-tick-processor.py delete mode 100755 regexp2000/tools/presubmit.py delete mode 100644 regexp2000/tools/splaytree.py delete mode 100755 regexp2000/tools/test.py delete mode 100644 regexp2000/tools/tickprocessor.py delete mode 100644 regexp2000/tools/utils.py delete mode 100644 regexp2000/tools/v8.xcodeproj/project.pbxproj delete mode 100644 regexp2000/tools/visual_studio/README.txt delete mode 100644 regexp2000/tools/visual_studio/common.vsprops delete mode 100644 regexp2000/tools/visual_studio/d8.vcproj delete mode 100644 regexp2000/tools/visual_studio/d8js2c.cmd delete mode 100644 regexp2000/tools/visual_studio/debug.vsprops delete mode 100644 regexp2000/tools/visual_studio/js2c.cmd delete mode 100644 regexp2000/tools/visual_studio/release.vsprops delete mode 100644 regexp2000/tools/visual_studio/v8.sln delete mode 100644 regexp2000/tools/visual_studio/v8.vcproj delete mode 100644 regexp2000/tools/visual_studio/v8_base.vcproj delete mode 100644 regexp2000/tools/visual_studio/v8_cctest.vcproj delete mode 100644 regexp2000/tools/visual_studio/v8_mksnapshot.vcproj delete mode 100644 regexp2000/tools/visual_studio/v8_process_sample.vcproj delete mode 100644 regexp2000/tools/visual_studio/v8_shell_sample.vcproj delete mode 100644 regexp2000/tools/visual_studio/v8_snapshot.vcproj delete mode 100755 regexp2000/tools/windows-tick-processor.py diff --git a/regexp2000/AUTHORS b/regexp2000/AUTHORS deleted file mode 100644 index 596cc58b7..000000000 --- a/regexp2000/AUTHORS +++ /dev/null @@ -1,13 +0,0 @@ -# Below is a list of people and organizations that have contributed -# to the V8 project. Names should be added to the list like so: -# -# Name/Organization - -Google Inc. - -Rene Rebe -Rafal Krypa -Jay Freeman -Daniel James -Paolo Giarrusso -Daniel Andersson diff --git a/regexp2000/ChangeLog b/regexp2000/ChangeLog deleted file mode 100644 index 95d3202fb..000000000 --- a/regexp2000/ChangeLog +++ /dev/null @@ -1,403 +0,0 @@ -2008-10-23: Version 0.4.0 - - Split the global object into two parts: The state holding global - object and the global object proxy. - - Fixed bug that affected the value of an assignment to an element - in certain cases (issue 116). - - Added GetPropertyNames functionality (issue 33) and extra Date - functions (issue 77) to the API. - - Changed WeakReferenceCallback to take a Persistent instead - of a Persistent (issue 101). - - Fixed issues with message reporting for exceptions in try-finally - blocks (issues 73 and 75). - - Optimized flattening of strings and string equality checking. - - Improved Boyer-Moore implementation for faster indexOf operations. - - Added development shell (d8) which includes counters and - completion support. - - Fixed problem with the receiver passed to functions called from - eval (issue 124). - - -2008-10-16: Version 0.3.5 - - Improved string hash-code distribution by excluding bit-field bits - from the hash-code. - - Changed string search algorithm used in indexOf from KMP to - Boyer-Moore. - - Improved the generated code for the instanceof operator. - - Improved performance of slow-case string equality checks by - specializing the code based on the string representation. - - Improve the handling of out-of-memory situations (issue 70). - - Improved performance of strict equality checks. - - Improved profiler output to make it easier to see anonymous - functions. - - Improved performance of slow-case keyed loads. - - Improved property access performance by allocating a number of - properties in the front object. - - Changed the toString behavior on the built-in object constructors - to print [native code] instead of the actual source. Some web - applications do not like constructors with complex toString - results. - - -2008-10-06: Version 0.3.4 - - Changed Array.prototype.sort to use quick sort. - - Fixed code generation issue where leaving a finally block with - break or continue would accumulate elements on the expression - stack (issue 86). - - Made sure that the name accessor on functions returns the expected - names for builtin JavaScript functions and C++ callback functions. - - Added fast case code for extending the property storage array of - JavaScript objects. - - Ported switch statement optimizations introduced in version 0.3.3 - to the ARM code generator. - - Allowed GCC to use strict-aliasing rules when compiling. - - Improved performance of arguments object allocation by taking care - of arguments adaptor frames in the generated code. - - Updated the V8 benchmark suite to version 2. - - -2008-09-25: Version 0.3.3 - - Improved handling of relocation information to enable more - peep-hole optimizations. - - Optimized switch statements where all labels are constant small - integers. - - Optimized String.prototype.indexOf for common cases. - - Fixed more build issues (issue 80). - - Fixed a couple of profiler issues. - - Fixed bug where the body of a function created using the Function - constructor was not allowed to end with a single-line comment - (issue 85). - - Improved handling of object literals by canonicalizing object - literal maps. This will allow JSON objects with the same set of - properties to share the same map making inline caching work better - for JSON objects. - - -2008-09-17: Version 0.3.2 - - Generalized the EvalCache into a CompilationCache and enabled it - for scripts too. The current strategy is to retire all entries - whenever a mark-sweep collection is started. - - Fixed bug where switch statements containing only a default case - would lead to an unbalanced stack (issue 69). - - Fixed bug that made access to the function in a named function - expression impossible in certain situations (issue 24). - - Fixed even more build issues. - - Optimized calling conventions on ARM. The conventions on ARM and - IA-32 now match. - - Removed static initializers for flags and counters. - - Improved inline caching behavior for uncommon cases where lazily - loading Date and RegExp code could force certain code paths go - megamorphic. - - Removed arguments adaption for builtins written in C++. This - makes Array.prototype.push and Array.prototype.pop slightly - faster. - - -2008-09-11: Version 0.3.1 - - Fixed a number of build issues. - - Fixed problem with missing I-cache flusing on ARM. - - Changed space layout in memory management by splitting up - code space into old data space and code space. - - Added utf-8 conversion support to the API (issue 57). - - Optimized repeated calls to eval with the same strings. These - repeated calls are common in web applications. - - Added Xcode project file. - - Optimized a couple of Array operation. - - Fixed parser bug by checking for end-of-string when parsing break - and continue (issue 35). - - Fixed problem where asian characters were not categorized as - letters. - - Fixed bug that disallowed calling functions fetched from an array - using a string as an array index (issue 32). - - Fixed bug where the internal field count on object templates were - sometimes ignored (issue 54). - - Added -f option to the shell sample for compatibility with other - engines (issue 18). - - Added source info to TryCatches in the API. - - Fixed problem where the seed for the random number generator was - clipped in a double to unsigned int conversion. - - Fixed bug where cons string symbols were sometimes converted to - non-symbol flat strings during GC. - - Fixed bug in error reporting when attempting to convert null to an - object. - - -2008-09-04: Version 0.3.0 - - Added support for running tests on the ARM simulator. - - Fixed bug in the 'in' operator where negative indices were not - treated correctly. - - Fixed build issues on gcc-4.3.1. - - Changed Date.prototype.toLocaleTimeString to not print the - timezone part of the time. - - Renamed debug.h to v8-debug.h to reduce the risk of name conflicts - with user code. - - -2008-09-02: Version 0.2.5 - - Renamed the top level directory 'public' to 'include'. - - Added 'env' option to the SCons build scripts to support - overriding the ENV part of the build environment. This is mostly - to support Windows builds in cases where SCons cannot find the - correct paths to the Windows SDK, as these paths cannot be passed - through shell environment variables. - - Enabled "Buffer Security Check" on for the Windows SCons build and - added the linker option /OPT:ICF as an optimization. - - Added the V8 benchmark suite to the repository. - - -2008-09-01: Version 0.2.4 - - Included mjsunit JavaScript test suite and C++ unit tests. - - Changed the shell sample to not print the result of executing a - script provided on the command line. - - Fixed issue when building samples on Windows using a shared V8 - library. Added visibility option on Linux build which makes the - generated library 18% smaller. - - Changed build system to accept multiple build modes in one build - and generate separate objects, libraries and executables for each - mode. - - Removed deferred negation optimization (a * -b => -(a * b)) since - this visibly changes operand conversion order. - - Improved parsing performance by introducing stack guard in - preparsing. Without a stack guard preparsing always bails out - with stack overflow. - - Changed shell sample to take flags directly from the command-line. - Added API call that implements this. - - Added load, quit and version functions to the shell sample so it's - easier to run benchmarks and tests. - - Fixed issue with building samples and cctests on 64-bit machines. - - Fixed bug in the runtime system where the prototype chain was not - always searched for a setter when setting a property that does not - exist locally. - - -2008-08-14: Version 0.2.3 - - Improved performance of garbage collection by moving the - function that updates pointers during compacting collection - into the updating visitor. This gives the compiler a better - chance to inline and avoid a function call per (potential) - pointer. - - Extended the shell sample with a --runtime-flags option. - - Added Visual Studio project files for the shell.cc and - process.cc samples. - - -2008-08-13: Version 0.2.2 - - Improved performance of garbage collection by changing the way - we use the marking stack in the event of stack overflow during - full garbage collection and by changing the way we mark roots. - - Cleaned up ARM version by removing top of stack caching and by - introducing push/pop elimination. - - Cleaned up the way runtime functions are called to allow - runtime calls with no arguments. - - Changed Windows build options to make sure that exceptions are - disabled and that optimization flags are enabled. - - Added first version of Visual Studio project files. - - -2008-08-06: Version 0.2.1 - - Improved performance of unary addition by avoiding runtime calls. - - Fixed the handling of '>' and '<=' to use right-to-left conversion - and left-to-right evaluation as specified by ECMA-262. - - Fixed a branch elimination bug on the ARM platform where incorrect - code was generated because of overly aggressive branch - elimination. - - Improved performance of code that repeatedly assigns the same - function to the same property of different objects with the same - map. - - Untangled DEBUG and ENABLE_DISASSEMBLER defines. The disassembler - no longer expects DEBUG to be defined. - - Added platform-nullos.cc to serve as the basis for new platform - implementations. - - -2008-07-30: Version 0.2.0 - - Changed all text files to have native svn:eol-style. - - Added a few samples and support for building them. The samples - include a simple shell that can be used to benchmark and test V8. - - Changed V8::GetVersion to return the version as a string. - - Added source for lazily loaded scripts to snapshots and made - serialization non-destructive. - - Improved ARM support by fixing the write barrier code to use - aligned loads and stores and by removing premature locals - optimization that relied on broken support for callee-saved - registers (removed). - - Refactored the code for marking live objects during garbage - collection and the code for allocating objects in paged - spaces. Introduced an abstraction for the map word of a heap- - allocated object and changed the memory allocator to allocate - executable memory only for spaces that may contain code objects. - - Moved StringBuilder to utils.h and ScopedLock to platform.h, where - they can be used by debugging and logging modules. Added - thread-safe message queues for dealing with debugger events. - - Fixed the source code reported by toString for certain builtin - empty functions and made sure that the prototype property of a - function is enumerable. - - Improved performance of converting values to condition flags in - generated code. - - Merged disassembler-{arch} files. - - -2008-07-28: Version 0.1.4 - - Added support for storing JavaScript stack traces in a stack - allocated buffer to make it visible in shallow core dumps. - Controlled by the --preallocate-message-memory flag which is - disabled by default. - - -2008-07-25: Version 0.1.3 - - Fixed bug in JSObject::GetPropertyAttributePostInterceptor where - map transitions would count as properties. - - Allowed aliased eval invocations by treating them as evals in the - global context. This may change in the future. - - Added support for accessing the last entered context through the - API and renamed Context::Current to Context::GetCurrent and - Context::GetSecurityContext to Context::GetCurrentSecurityContext. - - Fixed bug in the debugger that would cause the debugger scripts to - be recursively loaded and changed all disabling of interrupts to - be block-structured. - - Made snapshot data read-only to allow it to be more easily shared - across multiple users of V8 when linked as a shared library. - - -2008-07-16: Version 0.1.2 - - Fixed building on Mac OS X by recognizing i386 and friends as - IA-32 platforms. - - Added propagation of stack overflow exceptions that occur while - compiling nested functions. - - Improved debugger with support for recursive break points and - handling of exceptions that occur in the debugger JavaScript code. - - Renamed GetInternal to GetInternalField and SetInternal to - SetInternalField in the API and moved InternalFieldCount and - SetInternalFieldCount from FunctionTemplate to ObjectTemplate. - - -2008-07-09: Version 0.1.1 - - Fixed bug in stack overflow check code for IA-32 targets where a - non-tagged value in register eax was pushed to the stack. - - Fixed potential quadratic behavior when converting strings to - numbers. - - Fixed bug where the return value from Object::SetProperty could - end up being the property holder instead of the written value. - - Improved debugger support by allowing nested break points and by - dealing with stack-overflows when compiling functions before - setting break points in them. - - -2008-07-03: Version 0.1.0 - - Initial export. - diff --git a/regexp2000/LICENSE b/regexp2000/LICENSE deleted file mode 100644 index 2f61dc7fc..000000000 --- a/regexp2000/LICENSE +++ /dev/null @@ -1,46 +0,0 @@ -This license applies to all parts of V8 that are not externally -maintained libraries. The externally maintained libraries used by V8 -are: - - - Jscre, located under third_party/jscre. This code is copyrighted - by the University of Cambridge and Apple Inc. and released under a - 2-clause BSD license. - - - Dtoa, located under third_party/dtoa. This code is copyrighted by - David M. Gay and released under an MIT license. - - - Strongtalk assembler, the basis of the files assembler-arm-inl.h, - assembler-arm.cc, assembler-arm.h, assembler-ia32-inl.h, - assembler-ia32.cc, assembler-ia32.h, assembler.cc and assembler.h. - This code is copyrighted by Sun Microsystems Inc. and released - under a 3-clause BSD license. - -These libraries have their own licenses; we recommend you read them, -as their terms may differ from the terms below. - -Copyright 2006-2008, Google Inc. All rights reserved. -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of Google Inc. nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/regexp2000/SConstruct b/regexp2000/SConstruct deleted file mode 100644 index 6e5bc7a0a..000000000 --- a/regexp2000/SConstruct +++ /dev/null @@ -1,578 +0,0 @@ -# Copyright 2008 the V8 project authors. All rights reserved. -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following -# disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of Google Inc. nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -import platform -import re -import sys -import os -from os.path import join, dirname, abspath -from types import DictType, StringTypes -root_dir = dirname(File('SConstruct').rfile().abspath) -sys.path.append(join(root_dir, 'tools')) -import js2c, utils - - -LIBRARY_FLAGS = { - 'all': { - 'CPPDEFINES': ['ENABLE_LOGGING_AND_PROFILING'] - }, - 'gcc': { - 'all': { - 'DIALECTFLAGS': ['-ansi'], - 'CCFLAGS': ['$DIALECTFLAGS', '$WARNINGFLAGS'], - 'CXXFLAGS': ['$CCFLAGS', '-fno-rtti', '-fno-exceptions'], - 'LIBS': ['pthread'] - }, - 'mode:debug': { - 'CCFLAGS': ['-g', '-O0'], - 'CPPDEFINES': ['ENABLE_DISASSEMBLER', 'DEBUG'] - }, - 'mode:release': { - 'CCFLAGS': ['-O3', '-fomit-frame-pointer'] - }, - 'wordsize:64': { - 'CCFLAGS': ['-m32'], - 'LINKFLAGS': ['-m32'] - } - }, - 'msvc': { - 'all': { - 'DIALECTFLAGS': ['/nologo'], - 'CCFLAGS': ['$DIALECTFLAGS', '$WARNINGFLAGS'], - 'CXXFLAGS': ['$CCFLAGS', '/GR-', '/Gy'], - 'CPPDEFINES': ['WIN32', '_USE_32BIT_TIME_T', 'PCRE_STATIC'], - 'LINKFLAGS': ['/NOLOGO', '/MACHINE:X86', '/INCREMENTAL:NO', - '/NXCOMPAT', '/IGNORE:4221'], - 'ARFLAGS': ['/NOLOGO'], - 'CCPDBFLAGS': ['/Zi'] - }, - 'mode:debug': { - 'CCFLAGS': ['/Od', '/Gm', '/MTd'], - 'CPPDEFINES': ['_DEBUG', 'ENABLE_DISASSEMBLER', 'DEBUG'], - 'LINKFLAGS': ['/DEBUG'] - }, - 'mode:release': { - 'CCFLAGS': ['/O2', '/MT', '/GL'], - 'LINKFLAGS': ['/OPT:REF', '/OPT:ICF', '/LTCG'], - 'ARFLAGS': ['/LTCG'] - } - } -} - - -V8_EXTRA_FLAGS = { - 'gcc': { - 'all': { - 'CXXFLAGS': [], #['-fvisibility=hidden'], - 'WARNINGFLAGS': ['-pedantic', '-Wall', '-Werror', '-W', - '-Wno-unused-parameter'] - }, - 'arch:arm': { - 'CPPDEFINES': ['ARM'] - }, - 'disassembler:on': { - 'CPPDEFINES': ['ENABLE_DISASSEMBLER'] - } - }, - 'msvc': { - 'all': { - 'WARNINGFLAGS': ['/W3', '/WX', '/wd4355', '/wd4800'] - }, - 'library:shared': { - 'CPPDEFINES': ['BUILDING_V8_SHARED'] - }, - 'arch:arm': { - 'CPPDEFINES': ['ARM'] - }, - 'disassembler:on': { - 'CPPDEFINES': ['ENABLE_DISASSEMBLER'] - } - } -} - - -JSCRE_EXTRA_FLAGS = { - 'gcc': { - 'all': { - 'CPPDEFINES': ['SUPPORT_UTF8', 'NO_RECURSE', 'SUPPORT_UCP'], - 'WARNINGFLAGS': ['-w'] - }, - }, - 'msvc': { - 'all': { - 'CPPDEFINES': ['SUPPORT_UTF8', 'NO_RECURSE', 'SUPPORT_UCP'], - 'WARNINGFLAGS': ['/W3', '/WX', '/wd4355', '/wd4800'] - }, - 'library:shared': { - 'CPPDEFINES': ['BUILDING_V8_SHARED'] - } - } -} - - -DTOA_EXTRA_FLAGS = { - 'gcc': { - 'all': { - 'WARNINGFLAGS': ['-Werror'] - } - }, - 'msvc': { - 'all': { - 'WARNINGFLAGS': ['/WX', '/wd4018', '/wd4244'] - } - } -} - - -CCTEST_EXTRA_FLAGS = { - 'all': { - 'CPPPATH': [join(root_dir, 'src')], - 'LIBS': ['$LIBRARY'] - }, - 'gcc': { - 'all': { - 'LIBPATH': [abspath('.')] - }, - 'wordsize:64': { - 'CCFLAGS': ['-m32'], - 'LINKFLAGS': ['-m32'] - }, - }, - 'msvc': { - 'all': { - 'CPPDEFINES': ['_HAS_EXCEPTIONS=0'] - }, - 'library:shared': { - 'CPPDEFINES': ['USING_V8_SHARED'] - } - } -} - - -SAMPLE_FLAGS = { - 'all': { - 'CPPPATH': [join(abspath('.'), 'include')], - 'LIBS': ['$LIBRARY'], - }, - 'gcc': { - 'all': { - 'LIBS': ['pthread'], - 'LIBPATH': ['.'] - }, - 'wordsize:64': { - 'CCFLAGS': ['-m32'], - 'LINKFLAGS': ['-m32'] - }, - 'mode:release': { - 'CCFLAGS': ['-O2'] - }, - 'mode:debug': { - 'CCFLAGS': ['-g', '-O0'] - } - }, - 'msvc': { - 'all': { - 'CCFLAGS': ['/nologo'], - 'LINKFLAGS': ['/nologo'], - }, - 'library:shared': { - 'CPPDEFINES': ['USING_V8_SHARED'] - }, - 'prof:on': { - 'LINKFLAGS': ['/MAP'] - }, - 'mode:release': { - 'CCFLAGS': ['/O2', '/MT'], - 'LINKFLAGS': ['/OPT:REF', '/OPT:ICF', '/LTCG'] - }, - 'mode:debug': { - 'CCFLAGS': ['/Od', '/MTd'], - 'LINKFLAGS': ['/DEBUG'] - } - } -} - - -D8_FLAGS = { - 'gcc': { - 'console:readline': { - 'LIBS': ['readline'] - } - }, - 'msvc': { } -} - - -SUFFIXES = { - 'release': '', - 'debug': '_g' -} - - -def Abort(message): - print message - sys.exit(1) - - -def GuessOS(): - id = platform.system() - if id == 'Linux': - return 'linux' - elif id == 'Darwin': - return 'macos' - elif id == 'Windows': - return 'win32' - else: - return None - - -def GuessWordsize(): - if '64' in platform.machine(): - return '64' - else: - return '32' - - -def GuessToolchain(os): - tools = Environment()['TOOLS'] - if 'gcc' in tools: - return 'gcc' - elif 'msvc' in tools: - return 'msvc' - else: - return None - - -OS_GUESS = GuessOS() -TOOLCHAIN_GUESS = GuessToolchain(OS_GUESS) -ARCH_GUESS = utils.GuessArchitecture() -WORDSIZE_GUESS = GuessWordsize() - - -SIMPLE_OPTIONS = { - 'toolchain': { - 'values': ['gcc', 'msvc'], - 'default': TOOLCHAIN_GUESS, - 'help': 'the toolchain to use' - }, - 'os': { - 'values': ['linux', 'macos', 'win32'], - 'default': OS_GUESS, - 'help': 'the os to build for' - }, - 'arch': { - 'values':['arm', 'ia32'], - 'default': ARCH_GUESS, - 'help': 'the architecture to build for' - }, - 'snapshot': { - 'values': ['on', 'off'], - 'default': 'off', - 'help': 'build using snapshots for faster start-up' - }, - 'prof': { - 'values': ['on', 'off'], - 'default': 'off', - 'help': 'enable profiling of build target' - }, - 'library': { - 'values': ['static', 'shared'], - 'default': 'static', - 'help': 'the type of library to produce' - }, - 'wordsize': { - 'values': ['64', '32'], - 'default': WORDSIZE_GUESS, - 'help': 'the word size' - }, - 'simulator': { - 'values': ['arm', 'none'], - 'default': 'none', - 'help': 'build with simulator' - }, - 'disassembler': { - 'values': ['on', 'off'], - 'default': 'off', - 'help': 'enable the disassembler to inspect generated code' - }, - 'sourcesignatures': { - 'values': ['MD5', 'timestamp'], - 'default': 'MD5', - 'help': 'set how the build system detects file changes' - }, - 'console': { - 'values': ['dumb', 'readline'], - 'default': 'dumb', - 'help': 'the console to use for the d8 shell' - } -} - - -def GetOptions(): - result = Options() - result.Add('mode', 'compilation mode (debug, release)', 'release') - result.Add('sample', 'build sample (shell, process)', '') - result.Add('env', 'override environment settings (NAME1:value1,NAME2:value2)', '') - for (name, option) in SIMPLE_OPTIONS.iteritems(): - help = '%s (%s)' % (name, ", ".join(option['values'])) - result.Add(name, help, option.get('default')) - return result - - -def SplitList(str): - return [ s for s in str.split(",") if len(s) > 0 ] - - -def IsLegal(env, option, values): - str = env[option] - for s in SplitList(str): - if not s in values: - Abort("Illegal value for option %s '%s'." % (option, s)) - return False - return True - - -def VerifyOptions(env): - if not IsLegal(env, 'mode', ['debug', 'release']): - return False - if not IsLegal(env, 'sample', ["shell", "process"]): - return False - if env['os'] == 'win32' and env['library'] == 'shared' and env['prof'] == 'on': - Abort("Profiling on windows only supported for static library.") - for (name, option) in SIMPLE_OPTIONS.iteritems(): - if (not option.get('default')) and (name not in ARGUMENTS): - message = ("A value for option %s must be specified (%s)." % - (name, ", ".join(option['values']))) - Abort(message) - if not env[name] in option['values']: - message = ("Unknown %s value '%s'. Possible values are (%s)." % - (name, env[name], ", ".join(option['values']))) - Abort(message) - - -class BuildContext(object): - - def __init__(self, options, env_overrides, samples): - self.library_targets = [] - self.cctest_targets = [] - self.sample_targets = [] - self.d8_targets = [] - self.options = options - self.env_overrides = env_overrides - self.samples = samples - self.use_snapshot = (options['snapshot'] == 'on') - self.flags = None - - def AddRelevantFlags(self, initial, flags): - result = initial.copy() - self.AppendFlags(result, flags.get('all')) - toolchain = self.options['toolchain'] - self.AppendFlags(result, flags[toolchain].get('all')) - for option in sorted(self.options.keys()): - value = self.options[option] - self.AppendFlags(result, flags[toolchain].get(option + ':' + value)) - return result - - def GetRelevantSources(self, source): - result = [] - result += source.get('all', []) - for (name, value) in self.options.iteritems(): - result += source.get(name + ':' + value, []) - return sorted(result) - - def AppendFlags(self, options, added): - if not added: - return - for (key, value) in added.iteritems(): - if not key in options: - options[key] = value - else: - prefix = options[key] - if isinstance(prefix, StringTypes): prefix = prefix.split() - options[key] = prefix + value - - def ConfigureObject(self, env, input, **kw): - if self.options['library'] == 'static': - return env.StaticObject(input, **kw) - else: - return env.SharedObject(input, **kw) - - def ApplyEnvOverrides(self, env): - if not self.env_overrides: - return - if type(env['ENV']) == DictType: - env['ENV'].update(**self.env_overrides) - else: - env['ENV'] = self.env_overrides - - -def PostprocessOptions(options): - # Adjust architecture if the simulator option has been set - if (options['simulator'] != 'none') and (options['arch'] != options['simulator']): - if 'arch' in ARGUMENTS: - # Print a warning if arch has explicitly been set - print "Warning: forcing architecture to match simulator (%s)" % options['simulator'] - options['arch'] = options['simulator'] - - -def ParseEnvOverrides(arg): - # The environment overrides are in the format NAME1:value1,NAME2:value2 - overrides = {} - for override in arg.split(','): - pos = override.find(':') - if pos == -1: - continue - overrides[override[:pos].strip()] = override[pos+1:].strip() - return overrides - - -def BuildSpecific(env, mode, env_overrides): - options = {'mode': mode} - for option in SIMPLE_OPTIONS: - options[option] = env[option] - PostprocessOptions(options) - - context = BuildContext(options, env_overrides, samples=SplitList(env['sample'])) - - library_flags = context.AddRelevantFlags(os.environ, LIBRARY_FLAGS) - v8_flags = context.AddRelevantFlags(library_flags, V8_EXTRA_FLAGS) - jscre_flags = context.AddRelevantFlags(library_flags, JSCRE_EXTRA_FLAGS) - dtoa_flags = context.AddRelevantFlags(library_flags, DTOA_EXTRA_FLAGS) - cctest_flags = context.AddRelevantFlags(v8_flags, CCTEST_EXTRA_FLAGS) - sample_flags = context.AddRelevantFlags(os.environ, SAMPLE_FLAGS) - d8_flags = context.AddRelevantFlags(library_flags, D8_FLAGS) - - context.flags = { - 'v8': v8_flags, - 'jscre': jscre_flags, - 'dtoa': dtoa_flags, - 'cctest': cctest_flags, - 'sample': sample_flags, - 'd8': d8_flags - } - - target_id = mode - suffix = SUFFIXES[target_id] - library_name = 'v8' + suffix - env['LIBRARY'] = library_name - - # Build the object files by invoking SCons recursively. - (object_files, shell_files) = env.SConscript( - join('src', 'SConscript'), - build_dir=join('obj', target_id), - exports='context', - duplicate=False - ) - - # Link the object files into a library. - env.Replace(**context.flags['v8']) - context.ApplyEnvOverrides(env) - if context.options['library'] == 'static': - library = env.StaticLibrary(library_name, object_files) - else: - # There seems to be a glitch in the way scons decides where to put - # PDB files when compiling using MSVC so we specify it manually. - # This should not affect any other platforms. - pdb_name = library_name + '.dll.pdb' - library = env.SharedLibrary(library_name, object_files, PDB=pdb_name) - context.library_targets.append(library) - - d8_env = Environment() - d8_env.Replace(**context.flags['d8']) - shell = d8_env.Program('d8' + suffix, object_files + shell_files) - context.d8_targets.append(shell) - - for sample in context.samples: - sample_env = Environment(LIBRARY=library_name) - sample_env.Replace(**context.flags['sample']) - context.ApplyEnvOverrides(sample_env) - sample_object = sample_env.SConscript( - join('samples', 'SConscript'), - build_dir=join('obj', 'sample', sample, target_id), - exports='sample context', - duplicate=False - ) - sample_name = sample + suffix - sample_program = sample_env.Program(sample_name, sample_object) - sample_env.Depends(sample_program, library) - context.sample_targets.append(sample_program) - - cctest_program = env.SConscript( - join('test', 'cctest', 'SConscript'), - build_dir=join('obj', 'test', target_id), - exports='context object_files', - duplicate=False - ) - context.cctest_targets.append(cctest_program) - - return context - - -def Build(): - opts = GetOptions() - env = Environment(options=opts) - Help(opts.GenerateHelpText(env)) - VerifyOptions(env) - env_overrides = ParseEnvOverrides(env['env']) - - SourceSignatures(env['sourcesignatures']) - - libraries = [] - cctests = [] - samples = [] - d8s = [] - modes = SplitList(env['mode']) - for mode in modes: - context = BuildSpecific(env.Copy(), mode, env_overrides) - libraries += context.library_targets - cctests += context.cctest_targets - samples += context.sample_targets - d8s += context.d8_targets - - env.Alias('library', libraries) - env.Alias('cctests', cctests) - env.Alias('sample', samples) - env.Alias('d8', d8s) - - if env['sample']: - env.Default('sample') - else: - env.Default('library') - - -# We disable deprecation warnings because we need to be able to use -# env.Copy without getting warnings for compatibility with older -# version of scons. Also, there's a bug in some revisions that -# doesn't allow this flag to be set, so we swallow any exceptions. -# Lovely. -try: - SetOption('warn', 'no-deprecated') -except: - pass - - -Build() diff --git a/regexp2000/benchmarks/README.txt b/regexp2000/benchmarks/README.txt deleted file mode 100644 index 70582126b..000000000 --- a/regexp2000/benchmarks/README.txt +++ /dev/null @@ -1,29 +0,0 @@ -V8 Benchmark Suite -================== - -This is the V8 benchmark suite: A collection of pure JavaScript -benchmarks that we have used to tune V8. The licenses for the -individual benchmarks are included in the JavaScript files. - -In addition to the benchmarks, the suite consists of the benchmark -framework (base.js), which must be loaded before any of the individual -benchmark files, and two benchmark runners: An HTML version (run.html) -and a standalone JavaScript version (run.js). - - -Changes From Version 1 To Version 2 -=================================== - -For version 2 the crypto benchmark was fixed. Previously, the -decryption stage was given plaintext as input, which resulted in an -error. Now, the decryption stage is given the output of the -encryption stage as input. The result is checked against the original -plaintext. For this to give the correct results the crypto objects -are reset for each iteration of the benchmark. In addition, the size -of the plain text has been increased a little and the use of -Math.random() and new Date() to build an RNG pool has been removed. - -Other benchmarks were fixed to do elementary verification of the -results of their calculations. This is to avoid accidentally -obtaining scores that are the result of an incorrect JavaScript engine -optimization. diff --git a/regexp2000/benchmarks/base.js b/regexp2000/benchmarks/base.js deleted file mode 100644 index 2c26132f7..000000000 --- a/regexp2000/benchmarks/base.js +++ /dev/null @@ -1,221 +0,0 @@ -// Copyright 2008 the V8 project authors. All rights reserved. -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following -// disclaimer in the documentation and/or other materials provided -// with the distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -// Simple framework for running the benchmark suites and -// computing a score based on the timing measurements. - - -// A benchmark has a name (string) and a function that will be run to -// do the performance measurement. -function Benchmark(name, run) { - this.name = name; - this.run = run; -} - - -// Benchmark results hold the benchmark and the measured time used to -// run the benchmark. The benchmark score is computed later once a -// full benchmark suite has run to completion. -function BenchmarkResult(benchmark, time) { - this.benchmark = benchmark; - this.time = time; -} - - -// Automatically convert results to numbers. Used by the geometric -// mean computation. -BenchmarkResult.prototype.valueOf = function() { - return this.time; -} - - -// Suites of benchmarks consist of a name and the set of benchmarks in -// addition to the reference timing that the final score will be based -// on. This way, all scores are relative to a reference run and higher -// scores implies better performance. -function BenchmarkSuite(name, reference, benchmarks) { - this.name = name; - this.reference = reference; - this.benchmarks = benchmarks; - BenchmarkSuite.suites.push(this); -} - - -// Keep track of all declared benchmark suites. -BenchmarkSuite.suites = []; - - -// Scores are not comparable across versions. Bump the version if -// you're making changes that will affect that scores, e.g. if you add -// a new benchmark or change an existing one. -BenchmarkSuite.version = '2'; - - -// To make the benchmark results predictable, we replace Math.random -// with a 100% deterministic alternative. -Math.random = (function() { - var seed = 49734321; - return function() { - // Robert Jenkins' 32 bit integer hash function. - seed = ((seed + 0x7ed55d16) + (seed << 12)) & 0xffffffff; - seed = ((seed ^ 0xc761c23c) ^ (seed >>> 19)) & 0xffffffff; - seed = ((seed + 0x165667b1) + (seed << 5)) & 0xffffffff; - seed = ((seed + 0xd3a2646c) ^ (seed << 9)) & 0xffffffff; - seed = ((seed + 0xd3a2646c) ^ (seed << 9)) & 0xffffffff; - seed = ((seed + 0xfd7046c5) + (seed << 3)) & 0xffffffff; - seed = ((seed ^ 0xb55a4f09) ^ (seed >>> 16)) & 0xffffffff; - return (seed & 0xfffffff) / 0x10000000; - }; -})(); - - -// Runs all registered benchmark suites and optionally yields between -// each individual benchmark to avoid running for too long in the -// context of browsers. Once done, the final score is reported to the -// runner. -BenchmarkSuite.RunSuites = function(runner) { - var continuation = null; - var suites = BenchmarkSuite.suites; - var length = suites.length; - BenchmarkSuite.scores = []; - var index = 0; - function RunStep() { - while (continuation || index < length) { - if (continuation) { - continuation = continuation(); - } else { - var suite = suites[index++]; - if (runner.NotifyStart) runner.NotifyStart(suite.name); - continuation = suite.RunStep(runner); - } - if (continuation && typeof window != 'undefined' && window.setTimeout) { - window.setTimeout(RunStep, 100); - return; - } - } - if (runner.NotifyScore) { - var score = BenchmarkSuite.GeometricMean(BenchmarkSuite.scores); - runner.NotifyScore(Math.round(100 * score)); - } - } - RunStep(); -} - - -// Counts the total number of registered benchmarks. Useful for -// showing progress as a percentage. -BenchmarkSuite.CountBenchmarks = function() { - var result = 0; - var suites = BenchmarkSuite.suites; - for (var i = 0; i < suites.length; i++) { - result += suites[i].benchmarks.length; - } - return result; -} - - -// Computes the geometric mean of a set of numbers. -BenchmarkSuite.GeometricMean = function(numbers) { - var log = 0; - for (var i = 0; i < numbers.length; i++) { - log += Math.log(numbers[i]); - } - return Math.pow(Math.E, log / numbers.length); -} - - -// Notifies the runner that we're done running a single benchmark in -// the benchmark suite. This can be useful to report progress. -BenchmarkSuite.prototype.NotifyStep = function(result) { - this.results.push(result); - if (this.runner.NotifyStep) this.runner.NotifyStep(result.benchmark.name); -} - - -// Notifies the runner that we're done with running a suite and that -// we have a result which can be reported to the user if needed. -BenchmarkSuite.prototype.NotifyResult = function() { - var mean = BenchmarkSuite.GeometricMean(this.results); - var score = this.reference / mean; - BenchmarkSuite.scores.push(score); - if (this.runner.NotifyResult) { - this.runner.NotifyResult(this.name, Math.round(100 * score)); - } -} - - -// Notifies the runner that running a benchmark resulted in an error. -BenchmarkSuite.prototype.NotifyError = function(error) { - if (this.runner.NotifyError) { - this.runner.NotifyError(this.name, error); - } - if (this.runner.NotifyStep) { - this.runner.NotifyStep(this.name); - } -} - - -// Runs a single benchmark for at least a second and computes the -// average time it takes to run a single iteration. -BenchmarkSuite.prototype.RunSingle = function(benchmark) { - var elapsed = 0; - var start = new Date(); - for (var n = 0; elapsed < 1000; n++) { - benchmark.run(); - elapsed = new Date() - start; - } - var usec = (elapsed * 1000) / n; - this.NotifyStep(new BenchmarkResult(benchmark, usec)); -} - - -// This function starts running a suite, but stops between each -// individual benchmark in the suite and returns a continuation -// function which can be invoked to run the next benchmark. Once the -// last benchmark has been executed, null is returned. -BenchmarkSuite.prototype.RunStep = function(runner) { - this.results = []; - this.runner = runner; - var length = this.benchmarks.length; - var index = 0; - var suite = this; - function RunNext() { - if (index < length) { - try { - suite.RunSingle(suite.benchmarks[index++]); - } catch (e) { - suite.NotifyError(e); - return null; - } - return RunNext; - } - suite.NotifyResult(); - return null; - } - return RunNext(); -} diff --git a/regexp2000/benchmarks/crypto.js b/regexp2000/benchmarks/crypto.js deleted file mode 100644 index 12b88ef29..000000000 --- a/regexp2000/benchmarks/crypto.js +++ /dev/null @@ -1,1698 +0,0 @@ -/* - * Copyright (c) 2003-2005 Tom Wu - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - * - * IN NO EVENT SHALL TOM WU BE LIABLE FOR ANY SPECIAL, INCIDENTAL, - * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER - * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF - * THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT - * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * In addition, the following condition applies: - * - * All redistributions must retain an intact copy of this copyright notice - * and disclaimer. - */ - - -// The code has been adapted for use as a benchmark by Google. -var Crypto = new BenchmarkSuite('Crypto', 203037, [ - new Benchmark("Encrypt", encrypt), - new Benchmark("Decrypt", decrypt) -]); - - -// Basic JavaScript BN library - subset useful for RSA encryption. - -// Bits per digit -var dbits; -var BI_DB; -var BI_DM; -var BI_DV; - -var BI_FP; -var BI_FV; -var BI_F1; -var BI_F2; - -// JavaScript engine analysis -var canary = 0xdeadbeefcafe; -var j_lm = ((canary&0xffffff)==0xefcafe); - -// (public) Constructor -function BigInteger(a,b,c) { - this.array = new Array(); - if(a != null) - if("number" == typeof a) this.fromNumber(a,b,c); - else if(b == null && "string" != typeof a) this.fromString(a,256); - else this.fromString(a,b); -} - -// return new, unset BigInteger -function nbi() { return new BigInteger(null); } - -// am: Compute w_j += (x*this_i), propagate carries, -// c is initial carry, returns final carry. -// c < 3*dvalue, x < 2*dvalue, this_i < dvalue -// We need to select the fastest one that works in this environment. - -// am1: use a single mult and divide to get the high bits, -// max digit bits should be 26 because -// max internal value = 2*dvalue^2-2*dvalue (< 2^53) -function am1(i,x,w,j,c,n) { - var this_array = this.array; - var w_array = w.array; - while(--n >= 0) { - var v = x*this_array[i++]+w_array[j]+c; - c = Math.floor(v/0x4000000); - w_array[j++] = v&0x3ffffff; - } - return c; -} - -// am2 avoids a big mult-and-extract completely. -// Max digit bits should be <= 30 because we do bitwise ops -// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31) -function am2(i,x,w,j,c,n) { - var this_array = this.array; - var w_array = w.array; - var xl = x&0x7fff, xh = x>>15; - while(--n >= 0) { - var l = this_array[i]&0x7fff; - var h = this_array[i++]>>15; - var m = xh*l+h*xl; - l = xl*l+((m&0x7fff)<<15)+w_array[j]+(c&0x3fffffff); - c = (l>>>30)+(m>>>15)+xh*h+(c>>>30); - w_array[j++] = l&0x3fffffff; - } - return c; -} - -// Alternately, set max digit bits to 28 since some -// browsers slow down when dealing with 32-bit numbers. -function am3(i,x,w,j,c,n) { - var this_array = this.array; - var w_array = w.array; - - var xl = x&0x3fff, xh = x>>14; - while(--n >= 0) { - var l = this_array[i]&0x3fff; - var h = this_array[i++]>>14; - var m = xh*l+h*xl; - l = xl*l+((m&0x3fff)<<14)+w_array[j]+c; - c = (l>>28)+(m>>14)+xh*h; - w_array[j++] = l&0xfffffff; - } - return c; -} - -// This is tailored to VMs with 2-bit tagging. It makes sure -// that all the computations stay within the 29 bits available. -function am4(i,x,w,j,c,n) { - var this_array = this.array; - var w_array = w.array; - - var xl = x&0x1fff, xh = x>>13; - while(--n >= 0) { - var l = this_array[i]&0x1fff; - var h = this_array[i++]>>13; - var m = xh*l+h*xl; - l = xl*l+((m&0x1fff)<<13)+w_array[j]+c; - c = (l>>26)+(m>>13)+xh*h; - w_array[j++] = l&0x3ffffff; - } - return c; -} - -// am3/28 is best for SM, Rhino, but am4/26 is best for v8. -// Kestrel (Opera 9.5) gets its best result with am4/26. -// IE7 does 9% better with am3/28 than with am4/26. -// Firefox (SM) gets 10% faster with am3/28 than with am4/26. - -setupEngine = function(fn, bits) { - BigInteger.prototype.am = fn; - dbits = bits; - - BI_DB = dbits; - BI_DM = ((1<= 0; --i) r_array[i] = this_array[i]; - r.t = this.t; - r.s = this.s; -} - -// (protected) set from integer value x, -DV <= x < DV -function bnpFromInt(x) { - var this_array = this.array; - this.t = 1; - this.s = (x<0)?-1:0; - if(x > 0) this_array[0] = x; - else if(x < -1) this_array[0] = x+DV; - else this.t = 0; -} - -// return bigint initialized to value -function nbv(i) { var r = nbi(); r.fromInt(i); return r; } - -// (protected) set from string and radix -function bnpFromString(s,b) { - var this_array = this.array; - var k; - if(b == 16) k = 4; - else if(b == 8) k = 3; - else if(b == 256) k = 8; // byte array - else if(b == 2) k = 1; - else if(b == 32) k = 5; - else if(b == 4) k = 2; - else { this.fromRadix(s,b); return; } - this.t = 0; - this.s = 0; - var i = s.length, mi = false, sh = 0; - while(--i >= 0) { - var x = (k==8)?s[i]&0xff:intAt(s,i); - if(x < 0) { - if(s.charAt(i) == "-") mi = true; - continue; - } - mi = false; - if(sh == 0) - this_array[this.t++] = x; - else if(sh+k > BI_DB) { - this_array[this.t-1] |= (x&((1<<(BI_DB-sh))-1))<>(BI_DB-sh)); - } - else - this_array[this.t-1] |= x<= BI_DB) sh -= BI_DB; - } - if(k == 8 && (s[0]&0x80) != 0) { - this.s = -1; - if(sh > 0) this_array[this.t-1] |= ((1<<(BI_DB-sh))-1)< 0 && this_array[this.t-1] == c) --this.t; -} - -// (public) return string representation in given radix -function bnToString(b) { - var this_array = this.array; - if(this.s < 0) return "-"+this.negate().toString(b); - var k; - if(b == 16) k = 4; - else if(b == 8) k = 3; - else if(b == 2) k = 1; - else if(b == 32) k = 5; - else if(b == 4) k = 2; - else return this.toRadix(b); - var km = (1< 0) { - if(p < BI_DB && (d = this_array[i]>>p) > 0) { m = true; r = int2char(d); } - while(i >= 0) { - if(p < k) { - d = (this_array[i]&((1<>(p+=BI_DB-k); - } - else { - d = (this_array[i]>>(p-=k))&km; - if(p <= 0) { p += BI_DB; --i; } - } - if(d > 0) m = true; - if(m) r += int2char(d); - } - } - return m?r:"0"; -} - -// (public) -this -function bnNegate() { var r = nbi(); BigInteger.ZERO.subTo(this,r); return r; } - -// (public) |this| -function bnAbs() { return (this.s<0)?this.negate():this; } - -// (public) return + if this > a, - if this < a, 0 if equal -function bnCompareTo(a) { - var this_array = this.array; - var a_array = a.array; - - var r = this.s-a.s; - if(r != 0) return r; - var i = this.t; - r = i-a.t; - if(r != 0) return r; - while(--i >= 0) if((r=this_array[i]-a_array[i]) != 0) return r; - return 0; -} - -// returns bit length of the integer x -function nbits(x) { - var r = 1, t; - if((t=x>>>16) != 0) { x = t; r += 16; } - if((t=x>>8) != 0) { x = t; r += 8; } - if((t=x>>4) != 0) { x = t; r += 4; } - if((t=x>>2) != 0) { x = t; r += 2; } - if((t=x>>1) != 0) { x = t; r += 1; } - return r; -} - -// (public) return the number of bits in "this" -function bnBitLength() { - var this_array = this.array; - if(this.t <= 0) return 0; - return BI_DB*(this.t-1)+nbits(this_array[this.t-1]^(this.s&BI_DM)); -} - -// (protected) r = this << n*DB -function bnpDLShiftTo(n,r) { - var this_array = this.array; - var r_array = r.array; - var i; - for(i = this.t-1; i >= 0; --i) r_array[i+n] = this_array[i]; - for(i = n-1; i >= 0; --i) r_array[i] = 0; - r.t = this.t+n; - r.s = this.s; -} - -// (protected) r = this >> n*DB -function bnpDRShiftTo(n,r) { - var this_array = this.array; - var r_array = r.array; - for(var i = n; i < this.t; ++i) r_array[i-n] = this_array[i]; - r.t = Math.max(this.t-n,0); - r.s = this.s; -} - -// (protected) r = this << n -function bnpLShiftTo(n,r) { - var this_array = this.array; - var r_array = r.array; - var bs = n%BI_DB; - var cbs = BI_DB-bs; - var bm = (1<= 0; --i) { - r_array[i+ds+1] = (this_array[i]>>cbs)|c; - c = (this_array[i]&bm)<= 0; --i) r_array[i] = 0; - r_array[ds] = c; - r.t = this.t+ds+1; - r.s = this.s; - r.clamp(); -} - -// (protected) r = this >> n -function bnpRShiftTo(n,r) { - var this_array = this.array; - var r_array = r.array; - r.s = this.s; - var ds = Math.floor(n/BI_DB); - if(ds >= this.t) { r.t = 0; return; } - var bs = n%BI_DB; - var cbs = BI_DB-bs; - var bm = (1<>bs; - for(var i = ds+1; i < this.t; ++i) { - r_array[i-ds-1] |= (this_array[i]&bm)<>bs; - } - if(bs > 0) r_array[this.t-ds-1] |= (this.s&bm)<>= BI_DB; - } - if(a.t < this.t) { - c -= a.s; - while(i < this.t) { - c += this_array[i]; - r_array[i++] = c&BI_DM; - c >>= BI_DB; - } - c += this.s; - } - else { - c += this.s; - while(i < a.t) { - c -= a_array[i]; - r_array[i++] = c&BI_DM; - c >>= BI_DB; - } - c -= a.s; - } - r.s = (c<0)?-1:0; - if(c < -1) r_array[i++] = BI_DV+c; - else if(c > 0) r_array[i++] = c; - r.t = i; - r.clamp(); -} - -// (protected) r = this * a, r != this,a (HAC 14.12) -// "this" should be the larger one if appropriate. -function bnpMultiplyTo(a,r) { - var this_array = this.array; - var r_array = r.array; - var x = this.abs(), y = a.abs(); - var y_array = y.array; - - var i = x.t; - r.t = i+y.t; - while(--i >= 0) r_array[i] = 0; - for(i = 0; i < y.t; ++i) r_array[i+x.t] = x.am(0,y_array[i],r,i,0,x.t); - r.s = 0; - r.clamp(); - if(this.s != a.s) BigInteger.ZERO.subTo(r,r); -} - -// (protected) r = this^2, r != this (HAC 14.16) -function bnpSquareTo(r) { - var x = this.abs(); - var x_array = x.array; - var r_array = r.array; - - var i = r.t = 2*x.t; - while(--i >= 0) r_array[i] = 0; - for(i = 0; i < x.t-1; ++i) { - var c = x.am(i,x_array[i],r,2*i,0,1); - if((r_array[i+x.t]+=x.am(i+1,2*x_array[i],r,2*i+1,c,x.t-i-1)) >= BI_DV) { - r_array[i+x.t] -= BI_DV; - r_array[i+x.t+1] = 1; - } - } - if(r.t > 0) r_array[r.t-1] += x.am(i,x_array[i],r,2*i,0,1); - r.s = 0; - r.clamp(); -} - -// (protected) divide this by m, quotient and remainder to q, r (HAC 14.20) -// r != q, this != m. q or r may be null. -function bnpDivRemTo(m,q,r) { - var pm = m.abs(); - if(pm.t <= 0) return; - var pt = this.abs(); - if(pt.t < pm.t) { - if(q != null) q.fromInt(0); - if(r != null) this.copyTo(r); - return; - } - if(r == null) r = nbi(); - var y = nbi(), ts = this.s, ms = m.s; - var pm_array = pm.array; - var nsh = BI_DB-nbits(pm_array[pm.t-1]); // normalize modulus - if(nsh > 0) { pm.lShiftTo(nsh,y); pt.lShiftTo(nsh,r); } - else { pm.copyTo(y); pt.copyTo(r); } - var ys = y.t; - - var y_array = y.array; - var y0 = y_array[ys-1]; - if(y0 == 0) return; - var yt = y0*(1<1)?y_array[ys-2]>>BI_F2:0); - var d1 = BI_FV/yt, d2 = (1<= 0) { - r_array[r.t++] = 1; - r.subTo(t,r); - } - BigInteger.ONE.dlShiftTo(ys,t); - t.subTo(y,y); // "negative" y so we can replace sub with am later - while(y.t < ys) y_array[y.t++] = 0; - while(--j >= 0) { - // Estimate quotient digit - var qd = (r_array[--i]==y0)?BI_DM:Math.floor(r_array[i]*d1+(r_array[i-1]+e)*d2); - if((r_array[i]+=y.am(0,qd,r,j,0,ys)) < qd) { // Try it out - y.dlShiftTo(j,t); - r.subTo(t,r); - while(r_array[i] < --qd) r.subTo(t,r); - } - } - if(q != null) { - r.drShiftTo(ys,q); - if(ts != ms) BigInteger.ZERO.subTo(q,q); - } - r.t = ys; - r.clamp(); - if(nsh > 0) r.rShiftTo(nsh,r); // Denormalize remainder - if(ts < 0) BigInteger.ZERO.subTo(r,r); -} - -// (public) this mod a -function bnMod(a) { - var r = nbi(); - this.abs().divRemTo(a,null,r); - if(this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r,r); - return r; -} - -// Modular reduction using "classic" algorithm -function Classic(m) { this.m = m; } -function cConvert(x) { - if(x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m); - else return x; -} -function cRevert(x) { return x; } -function cReduce(x) { x.divRemTo(this.m,null,x); } -function cMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); } -function cSqrTo(x,r) { x.squareTo(r); this.reduce(r); } - -Classic.prototype.convert = cConvert; -Classic.prototype.revert = cRevert; -Classic.prototype.reduce = cReduce; -Classic.prototype.mulTo = cMulTo; -Classic.prototype.sqrTo = cSqrTo; - -// (protected) return "-1/this % 2^DB"; useful for Mont. reduction -// justification: -// xy == 1 (mod m) -// xy = 1+km -// xy(2-xy) = (1+km)(1-km) -// x[y(2-xy)] = 1-k^2m^2 -// x[y(2-xy)] == 1 (mod m^2) -// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2 -// should reduce x and y(2-xy) by m^2 at each step to keep size bounded. -// JS multiply "overflows" differently from C/C++, so care is needed here. -function bnpInvDigit() { - var this_array = this.array; - if(this.t < 1) return 0; - var x = this_array[0]; - if((x&1) == 0) return 0; - var y = x&3; // y == 1/x mod 2^2 - y = (y*(2-(x&0xf)*y))&0xf; // y == 1/x mod 2^4 - y = (y*(2-(x&0xff)*y))&0xff; // y == 1/x mod 2^8 - y = (y*(2-(((x&0xffff)*y)&0xffff)))&0xffff; // y == 1/x mod 2^16 - // last step - calculate inverse mod DV directly; - // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints - y = (y*(2-x*y%BI_DV))%BI_DV; // y == 1/x mod 2^dbits - // we really want the negative inverse, and -DV < y < DV - return (y>0)?BI_DV-y:-y; -} - -// Montgomery reduction -function Montgomery(m) { - this.m = m; - this.mp = m.invDigit(); - this.mpl = this.mp&0x7fff; - this.mph = this.mp>>15; - this.um = (1<<(BI_DB-15))-1; - this.mt2 = 2*m.t; -} - -// xR mod m -function montConvert(x) { - var r = nbi(); - x.abs().dlShiftTo(this.m.t,r); - r.divRemTo(this.m,null,r); - if(x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r,r); - return r; -} - -// x/R mod m -function montRevert(x) { - var r = nbi(); - x.copyTo(r); - this.reduce(r); - return r; -} - -// x = x/R mod m (HAC 14.32) -function montReduce(x) { - var x_array = x.array; - while(x.t <= this.mt2) // pad x so am has enough room later - x_array[x.t++] = 0; - for(var i = 0; i < this.m.t; ++i) { - // faster way of calculating u0 = x[i]*mp mod DV - var j = x_array[i]&0x7fff; - var u0 = (j*this.mpl+(((j*this.mph+(x_array[i]>>15)*this.mpl)&this.um)<<15))&BI_DM; - // use am to combine the multiply-shift-add into one call - j = i+this.m.t; - x_array[j] += this.m.am(0,u0,x,i,0,this.m.t); - // propagate carry - while(x_array[j] >= BI_DV) { x_array[j] -= BI_DV; x_array[++j]++; } - } - x.clamp(); - x.drShiftTo(this.m.t,x); - if(x.compareTo(this.m) >= 0) x.subTo(this.m,x); -} - -// r = "x^2/R mod m"; x != r -function montSqrTo(x,r) { x.squareTo(r); this.reduce(r); } - -// r = "xy/R mod m"; x,y != r -function montMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); } - -Montgomery.prototype.convert = montConvert; -Montgomery.prototype.revert = montRevert; -Montgomery.prototype.reduce = montReduce; -Montgomery.prototype.mulTo = montMulTo; -Montgomery.prototype.sqrTo = montSqrTo; - -// (protected) true iff this is even -function bnpIsEven() { - var this_array = this.array; - return ((this.t>0)?(this_array[0]&1):this.s) == 0; -} - -// (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79) -function bnpExp(e,z) { - if(e > 0xffffffff || e < 1) return BigInteger.ONE; - var r = nbi(), r2 = nbi(), g = z.convert(this), i = nbits(e)-1; - g.copyTo(r); - while(--i >= 0) { - z.sqrTo(r,r2); - if((e&(1< 0) z.mulTo(r2,g,r); - else { var t = r; r = r2; r2 = t; } - } - return z.revert(r); -} - -// (public) this^e % m, 0 <= e < 2^32 -function bnModPowInt(e,m) { - var z; - if(e < 256 || m.isEven()) z = new Classic(m); else z = new Montgomery(m); - return this.exp(e,z); -} - -// protected -BigInteger.prototype.copyTo = bnpCopyTo; -BigInteger.prototype.fromInt = bnpFromInt; -BigInteger.prototype.fromString = bnpFromString; -BigInteger.prototype.clamp = bnpClamp; -BigInteger.prototype.dlShiftTo = bnpDLShiftTo; -BigInteger.prototype.drShiftTo = bnpDRShiftTo; -BigInteger.prototype.lShiftTo = bnpLShiftTo; -BigInteger.prototype.rShiftTo = bnpRShiftTo; -BigInteger.prototype.subTo = bnpSubTo; -BigInteger.prototype.multiplyTo = bnpMultiplyTo; -BigInteger.prototype.squareTo = bnpSquareTo; -BigInteger.prototype.divRemTo = bnpDivRemTo; -BigInteger.prototype.invDigit = bnpInvDigit; -BigInteger.prototype.isEven = bnpIsEven; -BigInteger.prototype.exp = bnpExp; - -// public -BigInteger.prototype.toString = bnToString; -BigInteger.prototype.negate = bnNegate; -BigInteger.prototype.abs = bnAbs; -BigInteger.prototype.compareTo = bnCompareTo; -BigInteger.prototype.bitLength = bnBitLength; -BigInteger.prototype.mod = bnMod; -BigInteger.prototype.modPowInt = bnModPowInt; - -// "constants" -BigInteger.ZERO = nbv(0); -BigInteger.ONE = nbv(1); -// Copyright (c) 2005 Tom Wu -// All Rights Reserved. -// See "LICENSE" for details. - -// Extended JavaScript BN functions, required for RSA private ops. - -// (public) -function bnClone() { var r = nbi(); this.copyTo(r); return r; } - -// (public) return value as integer -function bnIntValue() { - var this_array = this.array; - if(this.s < 0) { - if(this.t == 1) return this_array[0]-BI_DV; - else if(this.t == 0) return -1; - } - else if(this.t == 1) return this_array[0]; - else if(this.t == 0) return 0; - // assumes 16 < DB < 32 - return ((this_array[1]&((1<<(32-BI_DB))-1))<>24; -} - -// (public) return value as short (assumes DB>=16) -function bnShortValue() { - var this_array = this.array; - return (this.t==0)?this.s:(this_array[0]<<16)>>16; -} - -// (protected) return x s.t. r^x < DV -function bnpChunkSize(r) { return Math.floor(Math.LN2*BI_DB/Math.log(r)); } - -// (public) 0 if this == 0, 1 if this > 0 -function bnSigNum() { - var this_array = this.array; - if(this.s < 0) return -1; - else if(this.t <= 0 || (this.t == 1 && this_array[0] <= 0)) return 0; - else return 1; -} - -// (protected) convert to radix string -function bnpToRadix(b) { - if(b == null) b = 10; - if(this.signum() == 0 || b < 2 || b > 36) return "0"; - var cs = this.chunkSize(b); - var a = Math.pow(b,cs); - var d = nbv(a), y = nbi(), z = nbi(), r = ""; - this.divRemTo(d,y,z); - while(y.signum() > 0) { - r = (a+z.intValue()).toString(b).substr(1) + r; - y.divRemTo(d,y,z); - } - return z.intValue().toString(b) + r; -} - -// (protected) convert from radix string -function bnpFromRadix(s,b) { - this.fromInt(0); - if(b == null) b = 10; - var cs = this.chunkSize(b); - var d = Math.pow(b,cs), mi = false, j = 0, w = 0; - for(var i = 0; i < s.length; ++i) { - var x = intAt(s,i); - if(x < 0) { - if(s.charAt(i) == "-" && this.signum() == 0) mi = true; - continue; - } - w = b*w+x; - if(++j >= cs) { - this.dMultiply(d); - this.dAddOffset(w,0); - j = 0; - w = 0; - } - } - if(j > 0) { - this.dMultiply(Math.pow(b,j)); - this.dAddOffset(w,0); - } - if(mi) BigInteger.ZERO.subTo(this,this); -} - -// (protected) alternate constructor -function bnpFromNumber(a,b,c) { - if("number" == typeof b) { - // new BigInteger(int,int,RNG) - if(a < 2) this.fromInt(1); - else { - this.fromNumber(a,c); - if(!this.testBit(a-1)) // force MSB set - this.bitwiseTo(BigInteger.ONE.shiftLeft(a-1),op_or,this); - if(this.isEven()) this.dAddOffset(1,0); // force odd - while(!this.isProbablePrime(b)) { - this.dAddOffset(2,0); - if(this.bitLength() > a) this.subTo(BigInteger.ONE.shiftLeft(a-1),this); - } - } - } - else { - // new BigInteger(int,RNG) - var x = new Array(), t = a&7; - x.length = (a>>3)+1; - b.nextBytes(x); - if(t > 0) x[0] &= ((1< 0) { - if(p < BI_DB && (d = this_array[i]>>p) != (this.s&BI_DM)>>p) - r[k++] = d|(this.s<<(BI_DB-p)); - while(i >= 0) { - if(p < 8) { - d = (this_array[i]&((1<>(p+=BI_DB-8); - } - else { - d = (this_array[i]>>(p-=8))&0xff; - if(p <= 0) { p += BI_DB; --i; } - } - if((d&0x80) != 0) d |= -256; - if(k == 0 && (this.s&0x80) != (d&0x80)) ++k; - if(k > 0 || d != this.s) r[k++] = d; - } - } - return r; -} - -function bnEquals(a) { return(this.compareTo(a)==0); } -function bnMin(a) { return(this.compareTo(a)<0)?this:a; } -function bnMax(a) { return(this.compareTo(a)>0)?this:a; } - -// (protected) r = this op a (bitwise) -function bnpBitwiseTo(a,op,r) { - var this_array = this.array; - var a_array = a.array; - var r_array = r.array; - var i, f, m = Math.min(a.t,this.t); - for(i = 0; i < m; ++i) r_array[i] = op(this_array[i],a_array[i]); - if(a.t < this.t) { - f = a.s&BI_DM; - for(i = m; i < this.t; ++i) r_array[i] = op(this_array[i],f); - r.t = this.t; - } - else { - f = this.s&BI_DM; - for(i = m; i < a.t; ++i) r_array[i] = op(f,a_array[i]); - r.t = a.t; - } - r.s = op(this.s,a.s); - r.clamp(); -} - -// (public) this & a -function op_and(x,y) { return x&y; } -function bnAnd(a) { var r = nbi(); this.bitwiseTo(a,op_and,r); return r; } - -// (public) this | a -function op_or(x,y) { return x|y; } -function bnOr(a) { var r = nbi(); this.bitwiseTo(a,op_or,r); return r; } - -// (public) this ^ a -function op_xor(x,y) { return x^y; } -function bnXor(a) { var r = nbi(); this.bitwiseTo(a,op_xor,r); return r; } - -// (public) this & ~a -function op_andnot(x,y) { return x&~y; } -function bnAndNot(a) { var r = nbi(); this.bitwiseTo(a,op_andnot,r); return r; } - -// (public) ~this -function bnNot() { - var this_array = this.array; - var r = nbi(); - var r_array = r.array; - - for(var i = 0; i < this.t; ++i) r_array[i] = BI_DM&~this_array[i]; - r.t = this.t; - r.s = ~this.s; - return r; -} - -// (public) this << n -function bnShiftLeft(n) { - var r = nbi(); - if(n < 0) this.rShiftTo(-n,r); else this.lShiftTo(n,r); - return r; -} - -// (public) this >> n -function bnShiftRight(n) { - var r = nbi(); - if(n < 0) this.lShiftTo(-n,r); else this.rShiftTo(n,r); - return r; -} - -// return index of lowest 1-bit in x, x < 2^31 -function lbit(x) { - if(x == 0) return -1; - var r = 0; - if((x&0xffff) == 0) { x >>= 16; r += 16; } - if((x&0xff) == 0) { x >>= 8; r += 8; } - if((x&0xf) == 0) { x >>= 4; r += 4; } - if((x&3) == 0) { x >>= 2; r += 2; } - if((x&1) == 0) ++r; - return r; -} - -// (public) returns index of lowest 1-bit (or -1 if none) -function bnGetLowestSetBit() { - var this_array = this.array; - for(var i = 0; i < this.t; ++i) - if(this_array[i] != 0) return i*BI_DB+lbit(this_array[i]); - if(this.s < 0) return this.t*BI_DB; - return -1; -} - -// return number of 1 bits in x -function cbit(x) { - var r = 0; - while(x != 0) { x &= x-1; ++r; } - return r; -} - -// (public) return number of set bits -function bnBitCount() { - var r = 0, x = this.s&BI_DM; - for(var i = 0; i < this.t; ++i) r += cbit(this_array[i]^x); - return r; -} - -// (public) true iff nth bit is set -function bnTestBit(n) { - var this_array = this.array; - var j = Math.floor(n/BI_DB); - if(j >= this.t) return(this.s!=0); - return((this_array[j]&(1<<(n%BI_DB)))!=0); -} - -// (protected) this op (1<>= BI_DB; - } - if(a.t < this.t) { - c += a.s; - while(i < this.t) { - c += this_array[i]; - r_array[i++] = c&BI_DM; - c >>= BI_DB; - } - c += this.s; - } - else { - c += this.s; - while(i < a.t) { - c += a_array[i]; - r_array[i++] = c&BI_DM; - c >>= BI_DB; - } - c += a.s; - } - r.s = (c<0)?-1:0; - if(c > 0) r_array[i++] = c; - else if(c < -1) r_array[i++] = BI_DV+c; - r.t = i; - r.clamp(); -} - -// (public) this + a -function bnAdd(a) { var r = nbi(); this.addTo(a,r); return r; } - -// (public) this - a -function bnSubtract(a) { var r = nbi(); this.subTo(a,r); return r; } - -// (public) this * a -function bnMultiply(a) { var r = nbi(); this.multiplyTo(a,r); return r; } - -// (public) this / a -function bnDivide(a) { var r = nbi(); this.divRemTo(a,r,null); return r; } - -// (public) this % a -function bnRemainder(a) { var r = nbi(); this.divRemTo(a,null,r); return r; } - -// (public) [this/a,this%a] -function bnDivideAndRemainder(a) { - var q = nbi(), r = nbi(); - this.divRemTo(a,q,r); - return new Array(q,r); -} - -// (protected) this *= n, this >= 0, 1 < n < DV -function bnpDMultiply(n) { - var this_array = this.array; - this_array[this.t] = this.am(0,n-1,this,0,0,this.t); - ++this.t; - this.clamp(); -} - -// (protected) this += n << w words, this >= 0 -function bnpDAddOffset(n,w) { - var this_array = this.array; - while(this.t <= w) this_array[this.t++] = 0; - this_array[w] += n; - while(this_array[w] >= BI_DV) { - this_array[w] -= BI_DV; - if(++w >= this.t) this_array[this.t++] = 0; - ++this_array[w]; - } -} - -// A "null" reducer -function NullExp() {} -function nNop(x) { return x; } -function nMulTo(x,y,r) { x.multiplyTo(y,r); } -function nSqrTo(x,r) { x.squareTo(r); } - -NullExp.prototype.convert = nNop; -NullExp.prototype.revert = nNop; -NullExp.prototype.mulTo = nMulTo; -NullExp.prototype.sqrTo = nSqrTo; - -// (public) this^e -function bnPow(e) { return this.exp(e,new NullExp()); } - -// (protected) r = lower n words of "this * a", a.t <= n -// "this" should be the larger one if appropriate. -function bnpMultiplyLowerTo(a,n,r) { - var r_array = r.array; - var a_array = a.array; - var i = Math.min(this.t+a.t,n); - r.s = 0; // assumes a,this >= 0 - r.t = i; - while(i > 0) r_array[--i] = 0; - var j; - for(j = r.t-this.t; i < j; ++i) r_array[i+this.t] = this.am(0,a_array[i],r,i,0,this.t); - for(j = Math.min(a.t,n); i < j; ++i) this.am(0,a_array[i],r,i,0,n-i); - r.clamp(); -} - -// (protected) r = "this * a" without lower n words, n > 0 -// "this" should be the larger one if appropriate. -function bnpMultiplyUpperTo(a,n,r) { - var r_array = r.array; - var a_array = a.array; - --n; - var i = r.t = this.t+a.t-n; - r.s = 0; // assumes a,this >= 0 - while(--i >= 0) r_array[i] = 0; - for(i = Math.max(n-this.t,0); i < a.t; ++i) - r_array[this.t+i-n] = this.am(n-i,a_array[i],r,0,0,this.t+i-n); - r.clamp(); - r.drShiftTo(1,r); -} - -// Barrett modular reduction -function Barrett(m) { - // setup Barrett - this.r2 = nbi(); - this.q3 = nbi(); - BigInteger.ONE.dlShiftTo(2*m.t,this.r2); - this.mu = this.r2.divide(m); - this.m = m; -} - -function barrettConvert(x) { - if(x.s < 0 || x.t > 2*this.m.t) return x.mod(this.m); - else if(x.compareTo(this.m) < 0) return x; - else { var r = nbi(); x.copyTo(r); this.reduce(r); return r; } -} - -function barrettRevert(x) { return x; } - -// x = x mod m (HAC 14.42) -function barrettReduce(x) { - x.drShiftTo(this.m.t-1,this.r2); - if(x.t > this.m.t+1) { x.t = this.m.t+1; x.clamp(); } - this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3); - this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2); - while(x.compareTo(this.r2) < 0) x.dAddOffset(1,this.m.t+1); - x.subTo(this.r2,x); - while(x.compareTo(this.m) >= 0) x.subTo(this.m,x); -} - -// r = x^2 mod m; x != r -function barrettSqrTo(x,r) { x.squareTo(r); this.reduce(r); } - -// r = x*y mod m; x,y != r -function barrettMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); } - -Barrett.prototype.convert = barrettConvert; -Barrett.prototype.revert = barrettRevert; -Barrett.prototype.reduce = barrettReduce; -Barrett.prototype.mulTo = barrettMulTo; -Barrett.prototype.sqrTo = barrettSqrTo; - -// (public) this^e % m (HAC 14.85) -function bnModPow(e,m) { - var e_array = e.array; - var i = e.bitLength(), k, r = nbv(1), z; - if(i <= 0) return r; - else if(i < 18) k = 1; - else if(i < 48) k = 3; - else if(i < 144) k = 4; - else if(i < 768) k = 5; - else k = 6; - if(i < 8) - z = new Classic(m); - else if(m.isEven()) - z = new Barrett(m); - else - z = new Montgomery(m); - - // precomputation - var g = new Array(), n = 3, k1 = k-1, km = (1< 1) { - var g2 = nbi(); - z.sqrTo(g[1],g2); - while(n <= km) { - g[n] = nbi(); - z.mulTo(g2,g[n-2],g[n]); - n += 2; - } - } - - var j = e.t-1, w, is1 = true, r2 = nbi(), t; - i = nbits(e_array[j])-1; - while(j >= 0) { - if(i >= k1) w = (e_array[j]>>(i-k1))&km; - else { - w = (e_array[j]&((1<<(i+1))-1))<<(k1-i); - if(j > 0) w |= e_array[j-1]>>(BI_DB+i-k1); - } - - n = k; - while((w&1) == 0) { w >>= 1; --n; } - if((i -= n) < 0) { i += BI_DB; --j; } - if(is1) { // ret == 1, don't bother squaring or multiplying it - g[w].copyTo(r); - is1 = false; - } - else { - while(n > 1) { z.sqrTo(r,r2); z.sqrTo(r2,r); n -= 2; } - if(n > 0) z.sqrTo(r,r2); else { t = r; r = r2; r2 = t; } - z.mulTo(r2,g[w],r); - } - - while(j >= 0 && (e_array[j]&(1< 0) { - x.rShiftTo(g,x); - y.rShiftTo(g,y); - } - while(x.signum() > 0) { - if((i = x.getLowestSetBit()) > 0) x.rShiftTo(i,x); - if((i = y.getLowestSetBit()) > 0) y.rShiftTo(i,y); - if(x.compareTo(y) >= 0) { - x.subTo(y,x); - x.rShiftTo(1,x); - } - else { - y.subTo(x,y); - y.rShiftTo(1,y); - } - } - if(g > 0) y.lShiftTo(g,y); - return y; -} - -// (protected) this % n, n < 2^26 -function bnpModInt(n) { - var this_array = this.array; - if(n <= 0) return 0; - var d = BI_DV%n, r = (this.s<0)?n-1:0; - if(this.t > 0) - if(d == 0) r = this_array[0]%n; - else for(var i = this.t-1; i >= 0; --i) r = (d*r+this_array[i])%n; - return r; -} - -// (public) 1/this % m (HAC 14.61) -function bnModInverse(m) { - var ac = m.isEven(); - if((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO; - var u = m.clone(), v = this.clone(); - var a = nbv(1), b = nbv(0), c = nbv(0), d = nbv(1); - while(u.signum() != 0) { - while(u.isEven()) { - u.rShiftTo(1,u); - if(ac) { - if(!a.isEven() || !b.isEven()) { a.addTo(this,a); b.subTo(m,b); } - a.rShiftTo(1,a); - } - else if(!b.isEven()) b.subTo(m,b); - b.rShiftTo(1,b); - } - while(v.isEven()) { - v.rShiftTo(1,v); - if(ac) { - if(!c.isEven() || !d.isEven()) { c.addTo(this,c); d.subTo(m,d); } - c.rShiftTo(1,c); - } - else if(!d.isEven()) d.subTo(m,d); - d.rShiftTo(1,d); - } - if(u.compareTo(v) >= 0) { - u.subTo(v,u); - if(ac) a.subTo(c,a); - b.subTo(d,b); - } - else { - v.subTo(u,v); - if(ac) c.subTo(a,c); - d.subTo(b,d); - } - } - if(v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO; - if(d.compareTo(m) >= 0) return d.subtract(m); - if(d.signum() < 0) d.addTo(m,d); else return d; - if(d.signum() < 0) return d.add(m); else return d; -} - -var lowprimes = [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509]; -var lplim = (1<<26)/lowprimes[lowprimes.length-1]; - -// (public) test primality with certainty >= 1-.5^t -function bnIsProbablePrime(t) { - var i, x = this.abs(); - var x_array = x.array; - if(x.t == 1 && x_array[0] <= lowprimes[lowprimes.length-1]) { - for(i = 0; i < lowprimes.length; ++i) - if(x_array[0] == lowprimes[i]) return true; - return false; - } - if(x.isEven()) return false; - i = 1; - while(i < lowprimes.length) { - var m = lowprimes[i], j = i+1; - while(j < lowprimes.length && m < lplim) m *= lowprimes[j++]; - m = x.modInt(m); - while(i < j) if(m%lowprimes[i++] == 0) return false; - } - return x.millerRabin(t); -} - -// (protected) true if probably prime (HAC 4.24, Miller-Rabin) -function bnpMillerRabin(t) { - var n1 = this.subtract(BigInteger.ONE); - var k = n1.getLowestSetBit(); - if(k <= 0) return false; - var r = n1.shiftRight(k); - t = (t+1)>>1; - if(t > lowprimes.length) t = lowprimes.length; - var a = nbi(); - for(var i = 0; i < t; ++i) { - a.fromInt(lowprimes[i]); - var y = a.modPow(r,this); - if(y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) { - var j = 1; - while(j++ < k && y.compareTo(n1) != 0) { - y = y.modPowInt(2,this); - if(y.compareTo(BigInteger.ONE) == 0) return false; - } - if(y.compareTo(n1) != 0) return false; - } - } - return true; -} - -// protected -BigInteger.prototype.chunkSize = bnpChunkSize; -BigInteger.prototype.toRadix = bnpToRadix; -BigInteger.prototype.fromRadix = bnpFromRadix; -BigInteger.prototype.fromNumber = bnpFromNumber; -BigInteger.prototype.bitwiseTo = bnpBitwiseTo; -BigInteger.prototype.changeBit = bnpChangeBit; -BigInteger.prototype.addTo = bnpAddTo; -BigInteger.prototype.dMultiply = bnpDMultiply; -BigInteger.prototype.dAddOffset = bnpDAddOffset; -BigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo; -BigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo; -BigInteger.prototype.modInt = bnpModInt; -BigInteger.prototype.millerRabin = bnpMillerRabin; - -// public -BigInteger.prototype.clone = bnClone; -BigInteger.prototype.intValue = bnIntValue; -BigInteger.prototype.byteValue = bnByteValue; -BigInteger.prototype.shortValue = bnShortValue; -BigInteger.prototype.signum = bnSigNum; -BigInteger.prototype.toByteArray = bnToByteArray; -BigInteger.prototype.equals = bnEquals; -BigInteger.prototype.min = bnMin; -BigInteger.prototype.max = bnMax; -BigInteger.prototype.and = bnAnd; -BigInteger.prototype.or = bnOr; -BigInteger.prototype.xor = bnXor; -BigInteger.prototype.andNot = bnAndNot; -BigInteger.prototype.not = bnNot; -BigInteger.prototype.shiftLeft = bnShiftLeft; -BigInteger.prototype.shiftRight = bnShiftRight; -BigInteger.prototype.getLowestSetBit = bnGetLowestSetBit; -BigInteger.prototype.bitCount = bnBitCount; -BigInteger.prototype.testBit = bnTestBit; -BigInteger.prototype.setBit = bnSetBit; -BigInteger.prototype.clearBit = bnClearBit; -BigInteger.prototype.flipBit = bnFlipBit; -BigInteger.prototype.add = bnAdd; -BigInteger.prototype.subtract = bnSubtract; -BigInteger.prototype.multiply = bnMultiply; -BigInteger.prototype.divide = bnDivide; -BigInteger.prototype.remainder = bnRemainder; -BigInteger.prototype.divideAndRemainder = bnDivideAndRemainder; -BigInteger.prototype.modPow = bnModPow; -BigInteger.prototype.modInverse = bnModInverse; -BigInteger.prototype.pow = bnPow; -BigInteger.prototype.gcd = bnGCD; -BigInteger.prototype.isProbablePrime = bnIsProbablePrime; - -// BigInteger interfaces not implemented in jsbn: - -// BigInteger(int signum, byte[] magnitude) -// double doubleValue() -// float floatValue() -// int hashCode() -// long longValue() -// static BigInteger valueOf(long val) -// prng4.js - uses Arcfour as a PRNG - -function Arcfour() { - this.i = 0; - this.j = 0; - this.S = new Array(); -} - -// Initialize arcfour context from key, an array of ints, each from [0..255] -function ARC4init(key) { - var i, j, t; - for(i = 0; i < 256; ++i) - this.S[i] = i; - j = 0; - for(i = 0; i < 256; ++i) { - j = (j + this.S[i] + key[i % key.length]) & 255; - t = this.S[i]; - this.S[i] = this.S[j]; - this.S[j] = t; - } - this.i = 0; - this.j = 0; -} - -function ARC4next() { - var t; - this.i = (this.i + 1) & 255; - this.j = (this.j + this.S[this.i]) & 255; - t = this.S[this.i]; - this.S[this.i] = this.S[this.j]; - this.S[this.j] = t; - return this.S[(t + this.S[this.i]) & 255]; -} - -Arcfour.prototype.init = ARC4init; -Arcfour.prototype.next = ARC4next; - -// Plug in your RNG constructor here -function prng_newstate() { - return new Arcfour(); -} - -// Pool size must be a multiple of 4 and greater than 32. -// An array of bytes the size of the pool will be passed to init() -var rng_psize = 256; -// Random number generator - requires a PRNG backend, e.g. prng4.js - -// For best results, put code like -// -// in your main HTML document. - -var rng_state; -var rng_pool; -var rng_pptr; - -// Mix in a 32-bit integer into the pool -function rng_seed_int(x) { - rng_pool[rng_pptr++] ^= x & 255; - rng_pool[rng_pptr++] ^= (x >> 8) & 255; - rng_pool[rng_pptr++] ^= (x >> 16) & 255; - rng_pool[rng_pptr++] ^= (x >> 24) & 255; - if(rng_pptr >= rng_psize) rng_pptr -= rng_psize; -} - -// Mix in the current time (w/milliseconds) into the pool -function rng_seed_time() { - // Use pre-computed date to avoid making the benchmark - // results dependent on the current date. - rng_seed_int(1122926989487); -} - -// Initialize the pool with junk if needed. -if(rng_pool == null) { - rng_pool = new Array(); - rng_pptr = 0; - var t; - while(rng_pptr < rng_psize) { // extract some randomness from Math.random() - t = Math.floor(65536 * Math.random()); - rng_pool[rng_pptr++] = t >>> 8; - rng_pool[rng_pptr++] = t & 255; - } - rng_pptr = 0; - rng_seed_time(); - //rng_seed_int(window.screenX); - //rng_seed_int(window.screenY); -} - -function rng_get_byte() { - if(rng_state == null) { - rng_seed_time(); - rng_state = prng_newstate(); - rng_state.init(rng_pool); - for(rng_pptr = 0; rng_pptr < rng_pool.length; ++rng_pptr) - rng_pool[rng_pptr] = 0; - rng_pptr = 0; - //rng_pool = null; - } - // TODO: allow reseeding after first request - return rng_state.next(); -} - -function rng_get_bytes(ba) { - var i; - for(i = 0; i < ba.length; ++i) ba[i] = rng_get_byte(); -} - -function SecureRandom() {} - -SecureRandom.prototype.nextBytes = rng_get_bytes; -// Depends on jsbn.js and rng.js - -// convert a (hex) string to a bignum object -function parseBigInt(str,r) { - return new BigInteger(str,r); -} - -function linebrk(s,n) { - var ret = ""; - var i = 0; - while(i + n < s.length) { - ret += s.substring(i,i+n) + "\n"; - i += n; - } - return ret + s.substring(i,s.length); -} - -function byte2Hex(b) { - if(b < 0x10) - return "0" + b.toString(16); - else - return b.toString(16); -} - -// PKCS#1 (type 2, random) pad input string s to n bytes, and return a bigint -function pkcs1pad2(s,n) { - if(n < s.length + 11) { - alert("Message too long for RSA"); - return null; - } - var ba = new Array(); - var i = s.length - 1; - while(i >= 0 && n > 0) ba[--n] = s.charCodeAt(i--); - ba[--n] = 0; - var rng = new SecureRandom(); - var x = new Array(); - while(n > 2) { // random non-zero pad - x[0] = 0; - while(x[0] == 0) rng.nextBytes(x); - ba[--n] = x[0]; - } - ba[--n] = 2; - ba[--n] = 0; - return new BigInteger(ba); -} - -// "empty" RSA key constructor -function RSAKey() { - this.n = null; - this.e = 0; - this.d = null; - this.p = null; - this.q = null; - this.dmp1 = null; - this.dmq1 = null; - this.coeff = null; -} - -// Set the public key fields N and e from hex strings -function RSASetPublic(N,E) { - if(N != null && E != null && N.length > 0 && E.length > 0) { - this.n = parseBigInt(N,16); - this.e = parseInt(E,16); - } - else - alert("Invalid RSA public key"); -} - -// Perform raw public operation on "x": return x^e (mod n) -function RSADoPublic(x) { - return x.modPowInt(this.e, this.n); -} - -// Return the PKCS#1 RSA encryption of "text" as an even-length hex string -function RSAEncrypt(text) { - var m = pkcs1pad2(text,(this.n.bitLength()+7)>>3); - if(m == null) return null; - var c = this.doPublic(m); - if(c == null) return null; - var h = c.toString(16); - if((h.length & 1) == 0) return h; else return "0" + h; -} - -// Return the PKCS#1 RSA encryption of "text" as a Base64-encoded string -//function RSAEncryptB64(text) { -// var h = this.encrypt(text); -// if(h) return hex2b64(h); else return null; -//} - -// protected -RSAKey.prototype.doPublic = RSADoPublic; - -// public -RSAKey.prototype.setPublic = RSASetPublic; -RSAKey.prototype.encrypt = RSAEncrypt; -//RSAKey.prototype.encrypt_b64 = RSAEncryptB64; -// Depends on rsa.js and jsbn2.js - -// Undo PKCS#1 (type 2, random) padding and, if valid, return the plaintext -function pkcs1unpad2(d,n) { - var b = d.toByteArray(); - var i = 0; - while(i < b.length && b[i] == 0) ++i; - if(b.length-i != n-1 || b[i] != 2) - return null; - ++i; - while(b[i] != 0) - if(++i >= b.length) return null; - var ret = ""; - while(++i < b.length) - ret += String.fromCharCode(b[i]); - return ret; -} - -// Set the private key fields N, e, and d from hex strings -function RSASetPrivate(N,E,D) { - if(N != null && E != null && N.length > 0 && E.length > 0) { - this.n = parseBigInt(N,16); - this.e = parseInt(E,16); - this.d = parseBigInt(D,16); - } - else - alert("Invalid RSA private key"); -} - -// Set the private key fields N, e, d and CRT params from hex strings -function RSASetPrivateEx(N,E,D,P,Q,DP,DQ,C) { - if(N != null && E != null && N.length > 0 && E.length > 0) { - this.n = parseBigInt(N,16); - this.e = parseInt(E,16); - this.d = parseBigInt(D,16); - this.p = parseBigInt(P,16); - this.q = parseBigInt(Q,16); - this.dmp1 = parseBigInt(DP,16); - this.dmq1 = parseBigInt(DQ,16); - this.coeff = parseBigInt(C,16); - } - else - alert("Invalid RSA private key"); -} - -// Generate a new random private key B bits long, using public expt E -function RSAGenerate(B,E) { - var rng = new SecureRandom(); - var qs = B>>1; - this.e = parseInt(E,16); - var ee = new BigInteger(E,16); - for(;;) { - for(;;) { - this.p = new BigInteger(B-qs,1,rng); - if(this.p.subtract(BigInteger.ONE).gcd(ee).compareTo(BigInteger.ONE) == 0 && this.p.isProbablePrime(10)) break; - } - for(;;) { - this.q = new BigInteger(qs,1,rng); - if(this.q.subtract(BigInteger.ONE).gcd(ee).compareTo(BigInteger.ONE) == 0 && this.q.isProbablePrime(10)) break; - } - if(this.p.compareTo(this.q) <= 0) { - var t = this.p; - this.p = this.q; - this.q = t; - } - var p1 = this.p.subtract(BigInteger.ONE); - var q1 = this.q.subtract(BigInteger.ONE); - var phi = p1.multiply(q1); - if(phi.gcd(ee).compareTo(BigInteger.ONE) == 0) { - this.n = this.p.multiply(this.q); - this.d = ee.modInverse(phi); - this.dmp1 = this.d.mod(p1); - this.dmq1 = this.d.mod(q1); - this.coeff = this.q.modInverse(this.p); - break; - } - } -} - -// Perform raw private operation on "x": return x^d (mod n) -function RSADoPrivate(x) { - if(this.p == null || this.q == null) - return x.modPow(this.d, this.n); - - // TODO: re-calculate any missing CRT params - var xp = x.mod(this.p).modPow(this.dmp1, this.p); - var xq = x.mod(this.q).modPow(this.dmq1, this.q); - - while(xp.compareTo(xq) < 0) - xp = xp.add(this.p); - return xp.subtract(xq).multiply(this.coeff).mod(this.p).multiply(this.q).add(xq); -} - -// Return the PKCS#1 RSA decryption of "ctext". -// "ctext" is an even-length hex string and the output is a plain string. -function RSADecrypt(ctext) { - var c = parseBigInt(ctext, 16); - var m = this.doPrivate(c); - if(m == null) return null; - return pkcs1unpad2(m, (this.n.bitLength()+7)>>3); -} - -// Return the PKCS#1 RSA decryption of "ctext". -// "ctext" is a Base64-encoded string and the output is a plain string. -//function RSAB64Decrypt(ctext) { -// var h = b64tohex(ctext); -// if(h) return this.decrypt(h); else return null; -//} - -// protected -RSAKey.prototype.doPrivate = RSADoPrivate; - -// public -RSAKey.prototype.setPrivate = RSASetPrivate; -RSAKey.prototype.setPrivateEx = RSASetPrivateEx; -RSAKey.prototype.generate = RSAGenerate; -RSAKey.prototype.decrypt = RSADecrypt; -//RSAKey.prototype.b64_decrypt = RSAB64Decrypt; - - -nValue="a5261939975948bb7a58dffe5ff54e65f0498f9175f5a09288810b8975871e99af3b5dd94057b0fc07535f5f97444504fa35169d461d0d30cf0192e307727c065168c788771c561a9400fb49175e9e6aa4e23fe11af69e9412dd23b0cb6684c4c2429bce139e848ab26d0829073351f4acd36074eafd036a5eb83359d2a698d3"; -eValue="10001"; -dValue="8e9912f6d3645894e8d38cb58c0db81ff516cf4c7e5a14c7f1eddb1459d2cded4d8d293fc97aee6aefb861859c8b6a3d1dfe710463e1f9ddc72048c09751971c4a580aa51eb523357a3cc48d31cfad1d4a165066ed92d4748fb6571211da5cb14bc11b6e2df7c1a559e6d5ac1cd5c94703a22891464fba23d0d965086277a161"; -pValue="d090ce58a92c75233a6486cb0a9209bf3583b64f540c76f5294bb97d285eed33aec220bde14b2417951178ac152ceab6da7090905b478195498b352048f15e7d"; -qValue="cab575dc652bb66df15a0359609d51d1db184750c00c6698b90ef3465c99655103edbf0d54c56aec0ce3c4d22592338092a126a0cc49f65a4a30d222b411e58f"; -dmp1Value="1a24bca8e273df2f0e47c199bbf678604e7df7215480c77c8db39f49b000ce2cf7500038acfff5433b7d582a01f1826e6f4d42e1c57f5e1fef7b12aabc59fd25"; -dmq1Value="3d06982efbbe47339e1f6d36b1216b8a741d410b0c662f54f7118b27b9a4ec9d914337eb39841d8666f3034408cf94f5b62f11c402fc994fe15a05493150d9fd"; -coeffValue="3a3e731acd8960b7ff9eb81a7ff93bd1cfa74cbd56987db58b4594fb09c09084db1734c8143f98b602b981aaa9243ca28deb69b5b280ee8dcee0fd2625e53250"; - -setupEngine(am3, 28); - -var TEXT = "The quick brown fox jumped over the extremely lazy frog! " + - "Now is the time for all good men to come to the party."; -var encrypted; - -function encrypt() { - var RSA = new RSAKey(); - RSA.setPublic(nValue, eValue); - RSA.setPrivateEx(nValue, eValue, dValue, pValue, qValue, dmp1Value, dmq1Value, coeffValue); - encrypted = RSA.encrypt(TEXT); -} - -function decrypt() { - var RSA = new RSAKey(); - RSA.setPublic(nValue, eValue); - RSA.setPrivateEx(nValue, eValue, dValue, pValue, qValue, dmp1Value, dmq1Value, coeffValue); - var decrypted = RSA.decrypt(encrypted); - if (decrypted != TEXT) { - throw new Error("Crypto operation failed"); - } -} diff --git a/regexp2000/benchmarks/deltablue.js b/regexp2000/benchmarks/deltablue.js deleted file mode 100644 index b51afd1d2..000000000 --- a/regexp2000/benchmarks/deltablue.js +++ /dev/null @@ -1,880 +0,0 @@ -// Copyright 2008 the V8 project authors. All rights reserved. -// Copyright 1996 John Maloney and Mario Wolczko. - -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - -// This implementation of the DeltaBlue benchmark is derived -// from the Smalltalk implementation by John Maloney and Mario -// Wolczko. Some parts have been translated directly, whereas -// others have been modified more aggresively to make it feel -// more like a JavaScript program. - - -var DeltaBlue = new BenchmarkSuite('DeltaBlue', 71104, [ - new Benchmark('DeltaBlue', deltaBlue) -]); - - -/** - * A JavaScript implementation of the DeltaBlue constrain-solving - * algorithm, as described in: - * - * "The DeltaBlue Algorithm: An Incremental Constraint Hierarchy Solver" - * Bjorn N. Freeman-Benson and John Maloney - * January 1990 Communications of the ACM, - * also available as University of Washington TR 89-08-06. - * - * Beware: this benchmark is written in a grotesque style where - * the constraint model is built by side-effects from constructors. - * I've kept it this way to avoid deviating too much from the original - * implementation. - */ - - -/* --- O b j e c t M o d e l --- */ - -Object.prototype.inherits = function (shuper) { - function Inheriter() { } - Inheriter.prototype = shuper.prototype; - this.prototype = new Inheriter(); - this.superConstructor = shuper; -} - -function OrderedCollection() { - this.elms = new Array(); -} - -OrderedCollection.prototype.add = function (elm) { - this.elms.push(elm); -} - -OrderedCollection.prototype.at = function (index) { - return this.elms[index]; -} - -OrderedCollection.prototype.size = function () { - return this.elms.length; -} - -OrderedCollection.prototype.removeFirst = function () { - return this.elms.pop(); -} - -OrderedCollection.prototype.remove = function (elm) { - var index = 0, skipped = 0; - for (var i = 0; i < this.elms.length; i++) { - var value = this.elms[i]; - if (value != elm) { - this.elms[index] = value; - index++; - } else { - skipped++; - } - } - for (var i = 0; i < skipped; i++) - this.elms.pop(); -} - -/* --- * - * S t r e n g t h - * --- */ - -/** - * Strengths are used to measure the relative importance of constraints. - * New strengths may be inserted in the strength hierarchy without - * disrupting current constraints. Strengths cannot be created outside - * this class, so pointer comparison can be used for value comparison. - */ -function Strength(strengthValue, name) { - this.strengthValue = strengthValue; - this.name = name; -} - -Strength.stronger = function (s1, s2) { - return s1.strengthValue < s2.strengthValue; -} - -Strength.weaker = function (s1, s2) { - return s1.strengthValue > s2.strengthValue; -} - -Strength.weakestOf = function (s1, s2) { - return this.weaker(s1, s2) ? s1 : s2; -} - -Strength.strongest = function (s1, s2) { - return this.stronger(s1, s2) ? s1 : s2; -} - -Strength.prototype.nextWeaker = function () { - switch (this.strengthValue) { - case 0: return Strength.WEAKEST; - case 1: return Strength.WEAK_DEFAULT; - case 2: return Strength.NORMAL; - case 3: return Strength.STRONG_DEFAULT; - case 4: return Strength.PREFERRED; - case 5: return Strength.REQUIRED; - } -} - -// Strength constants. -Strength.REQUIRED = new Strength(0, "required"); -Strength.STONG_PREFERRED = new Strength(1, "strongPreferred"); -Strength.PREFERRED = new Strength(2, "preferred"); -Strength.STRONG_DEFAULT = new Strength(3, "strongDefault"); -Strength.NORMAL = new Strength(4, "normal"); -Strength.WEAK_DEFAULT = new Strength(5, "weakDefault"); -Strength.WEAKEST = new Strength(6, "weakest"); - -/* --- * - * C o n s t r a i n t - * --- */ - -/** - * An abstract class representing a system-maintainable relationship - * (or "constraint") between a set of variables. A constraint supplies - * a strength instance variable; concrete subclasses provide a means - * of storing the constrained variables and other information required - * to represent a constraint. - */ -function Constraint(strength) { - this.strength = strength; -} - -/** - * Activate this constraint and attempt to satisfy it. - */ -Constraint.prototype.addConstraint = function () { - this.addToGraph(); - planner.incrementalAdd(this); -} - -/** - * Attempt to find a way to enforce this constraint. If successful, - * record the solution, perhaps modifying the current dataflow - * graph. Answer the constraint that this constraint overrides, if - * there is one, or nil, if there isn't. - * Assume: I am not already satisfied. - */ -Constraint.prototype.satisfy = function (mark) { - this.chooseMethod(mark); - if (!this.isSatisfied()) { - if (this.strength == Strength.REQUIRED) - alert("Could not satisfy a required constraint!"); - return null; - } - this.markInputs(mark); - var out = this.output(); - var overridden = out.determinedBy; - if (overridden != null) overridden.markUnsatisfied(); - out.determinedBy = this; - if (!planner.addPropagate(this, mark)) - alert("Cycle encountered"); - out.mark = mark; - return overridden; -} - -Constraint.prototype.destroyConstraint = function () { - if (this.isSatisfied()) planner.incrementalRemove(this); - else this.removeFromGraph(); -} - -/** - * Normal constraints are not input constraints. An input constraint - * is one that depends on external state, such as the mouse, the - * keybord, a clock, or some arbitraty piece of imperative code. - */ -Constraint.prototype.isInput = function () { - return false; -} - -/* --- * - * U n a r y C o n s t r a i n t - * --- */ - -/** - * Abstract superclass for constraints having a single possible output - * variable. - */ -function UnaryConstraint(v, strength) { - UnaryConstraint.superConstructor.call(this, strength); - this.myOutput = v; - this.satisfied = false; - this.addConstraint(); -} - -UnaryConstraint.inherits(Constraint); - -/** - * Adds this constraint to the constraint graph - */ -UnaryConstraint.prototype.addToGraph = function () { - this.myOutput.addConstraint(this); - this.satisfied = false; -} - -/** - * Decides if this constraint can be satisfied and records that - * decision. - */ -UnaryConstraint.prototype.chooseMethod = function (mark) { - this.satisfied = (this.myOutput.mark != mark) - && Strength.stronger(this.strength, this.myOutput.walkStrength); -} - -/** - * Returns true if this constraint is satisfied in the current solution. - */ -UnaryConstraint.prototype.isSatisfied = function () { - return this.satisfied; -} - -UnaryConstraint.prototype.markInputs = function (mark) { - // has no inputs -} - -/** - * Returns the current output variable. - */ -UnaryConstraint.prototype.output = function () { - return this.myOutput; -} - -/** - * Calculate the walkabout strength, the stay flag, and, if it is - * 'stay', the value for the current output of this constraint. Assume - * this constraint is satisfied. - */ -UnaryConstraint.prototype.recalculate = function () { - this.myOutput.walkStrength = this.strength; - this.myOutput.stay = !this.isInput(); - if (this.myOutput.stay) this.execute(); // Stay optimization -} - -/** - * Records that this constraint is unsatisfied - */ -UnaryConstraint.prototype.markUnsatisfied = function () { - this.satisfied = false; -} - -UnaryConstraint.prototype.inputsKnown = function () { - return true; -} - -UnaryConstraint.prototype.removeFromGraph = function () { - if (this.myOutput != null) this.myOutput.removeConstraint(this); - this.satisfied = false; -} - -/* --- * - * S t a y C o n s t r a i n t - * --- */ - -/** - * Variables that should, with some level of preference, stay the same. - * Planners may exploit the fact that instances, if satisfied, will not - * change their output during plan execution. This is called "stay - * optimization". - */ -function StayConstraint(v, str) { - StayConstraint.superConstructor.call(this, v, str); -} - -StayConstraint.inherits(UnaryConstraint); - -StayConstraint.prototype.execute = function () { - // Stay constraints do nothing -} - -/* --- * - * E d i t C o n s t r a i n t - * --- */ - -/** - * A unary input constraint used to mark a variable that the client - * wishes to change. - */ -function EditConstraint(v, str) { - EditConstraint.superConstructor.call(this, v, str); -} - -EditConstraint.inherits(UnaryConstraint); - -/** - * Edits indicate that a variable is to be changed by imperative code. - */ -EditConstraint.prototype.isInput = function () { - return true; -} - -EditConstraint.prototype.execute = function () { - // Edit constraints do nothing -} - -/* --- * - * B i n a r y C o n s t r a i n t - * --- */ - -var Direction = new Object(); -Direction.NONE = 0; -Direction.FORWARD = 1; -Direction.BACKWARD = -1; - -/** - * Abstract superclass for constraints having two possible output - * variables. - */ -function BinaryConstraint(var1, var2, strength) { - BinaryConstraint.superConstructor.call(this, strength); - this.v1 = var1; - this.v2 = var2; - this.direction = Direction.NONE; - this.addConstraint(); -} - -BinaryConstraint.inherits(Constraint); - -/** - * Decides if this constratint can be satisfied and which way it - * should flow based on the relative strength of the variables related, - * and record that decision. - */ -BinaryConstraint.prototype.chooseMethod = function (mark) { - if (this.v1.mark == mark) { - this.direction = (this.v1.mark != mark && Strength.stronger(this.strength, this.v2.walkStrength)) - ? Direction.FORWARD - : Direction.NONE; - } - if (this.v2.mark == mark) { - this.direction = (this.v1.mark != mark && Strength.stronger(this.strength, this.v1.walkStrength)) - ? Direction.BACKWARD - : Direction.NONE; - } - if (Strength.weaker(this.v1.walkStrength, this.v2.walkStrength)) { - this.direction = Strength.stronger(this.strength, this.v1.walkStrength) - ? Direction.BACKWARD - : Direction.NONE; - } else { - this.direction = Strength.stronger(this.strength, this.v2.walkStrength) - ? Direction.FORWARD - : Direction.BACKWARD - } -} - -/** - * Add this constraint to the constraint graph - */ -BinaryConstraint.prototype.addToGraph = function () { - this.v1.addConstraint(this); - this.v2.addConstraint(this); - this.direction = Direction.NONE; -} - -/** - * Answer true if this constraint is satisfied in the current solution. - */ -BinaryConstraint.prototype.isSatisfied = function () { - return this.direction != Direction.NONE; -} - -/** - * Mark the input variable with the given mark. - */ -BinaryConstraint.prototype.markInputs = function (mark) { - this.input().mark = mark; -} - -/** - * Returns the current input variable - */ -BinaryConstraint.prototype.input = function () { - return (this.direction == Direction.FORWARD) ? this.v1 : this.v2; -} - -/** - * Returns the current output variable - */ -BinaryConstraint.prototype.output = function () { - return (this.direction == Direction.FORWARD) ? this.v2 : this.v1; -} - -/** - * Calculate the walkabout strength, the stay flag, and, if it is - * 'stay', the value for the current output of this - * constraint. Assume this constraint is satisfied. - */ -BinaryConstraint.prototype.recalculate = function () { - var ihn = this.input(), out = this.output(); - out.walkStrength = Strength.weakestOf(this.strength, ihn.walkStrength); - out.stay = ihn.stay; - if (out.stay) this.execute(); -} - -/** - * Record the fact that this constraint is unsatisfied. - */ -BinaryConstraint.prototype.markUnsatisfied = function () { - this.direction = Direction.NONE; -} - -BinaryConstraint.prototype.inputsKnown = function (mark) { - var i = this.input(); - return i.mark == mark || i.stay || i.determinedBy == null; -} - -BinaryConstraint.prototype.removeFromGraph = function () { - if (this.v1 != null) this.v1.removeConstraint(this); - if (this.v2 != null) this.v2.removeConstraint(this); - this.direction = Direction.NONE; -} - -/* --- * - * S c a l e C o n s t r a i n t - * --- */ - -/** - * Relates two variables by the linear scaling relationship: "v2 = - * (v1 * scale) + offset". Either v1 or v2 may be changed to maintain - * this relationship but the scale factor and offset are considered - * read-only. - */ -function ScaleConstraint(src, scale, offset, dest, strength) { - this.direction = Direction.NONE; - this.scale = scale; - this.offset = offset; - ScaleConstraint.superConstructor.call(this, src, dest, strength); -} - -ScaleConstraint.inherits(BinaryConstraint); - -/** - * Adds this constraint to the constraint graph. - */ -ScaleConstraint.prototype.addToGraph = function () { - ScaleConstraint.superConstructor.prototype.addToGraph.call(this); - this.scale.addConstraint(this); - this.offset.addConstraint(this); -} - -ScaleConstraint.prototype.removeFromGraph = function () { - ScaleConstraint.superConstructor.prototype.removeFromGraph.call(this); - if (this.scale != null) this.scale.removeConstraint(this); - if (this.offset != null) this.offset.removeConstraint(this); -} - -ScaleConstraint.prototype.markInputs = function (mark) { - ScaleConstraint.superConstructor.prototype.markInputs.call(this, mark); - this.scale.mark = this.offset.mark = mark; -} - -/** - * Enforce this constraint. Assume that it is satisfied. - */ -ScaleConstraint.prototype.execute = function () { - if (this.direction == Direction.FORWARD) { - this.v2.value = this.v1.value * this.scale.value + this.offset.value; - } else { - this.v1.value = (this.v2.value - this.offset.value) / this.scale.value; - } -} - -/** - * Calculate the walkabout strength, the stay flag, and, if it is - * 'stay', the value for the current output of this constraint. Assume - * this constraint is satisfied. - */ -ScaleConstraint.prototype.recalculate = function () { - var ihn = this.input(), out = this.output(); - out.walkStrength = Strength.weakestOf(this.strength, ihn.walkStrength); - out.stay = ihn.stay && this.scale.stay && this.offset.stay; - if (out.stay) this.execute(); -} - -/* --- * - * E q u a l i t y C o n s t r a i n t - * --- */ - -/** - * Constrains two variables to have the same value. - */ -function EqualityConstraint(var1, var2, strength) { - EqualityConstraint.superConstructor.call(this, var1, var2, strength); -} - -EqualityConstraint.inherits(BinaryConstraint); - -/** - * Enforce this constraint. Assume that it is satisfied. - */ -EqualityConstraint.prototype.execute = function () { - this.output().value = this.input().value; -} - -/* --- * - * V a r i a b l e - * --- */ - -/** - * A constrained variable. In addition to its value, it maintain the - * structure of the constraint graph, the current dataflow graph, and - * various parameters of interest to the DeltaBlue incremental - * constraint solver. - **/ -function Variable(name, initialValue) { - this.value = initialValue || 0; - this.constraints = new OrderedCollection(); - this.determinedBy = null; - this.mark = 0; - this.walkStrength = Strength.WEAKEST; - this.stay = true; - this.name = name; -} - -/** - * Add the given constraint to the set of all constraints that refer - * this variable. - */ -Variable.prototype.addConstraint = function (c) { - this.constraints.add(c); -} - -/** - * Removes all traces of c from this variable. - */ -Variable.prototype.removeConstraint = function (c) { - this.constraints.remove(c); - if (this.determinedBy == c) this.determinedBy = null; -} - -/* --- * - * P l a n n e r - * --- */ - -/** - * The DeltaBlue planner - */ -function Planner() { - this.currentMark = 0; -} - -/** - * Attempt to satisfy the given constraint and, if successful, - * incrementally update the dataflow graph. Details: If satifying - * the constraint is successful, it may override a weaker constraint - * on its output. The algorithm attempts to resatisfy that - * constraint using some other method. This process is repeated - * until either a) it reaches a variable that was not previously - * determined by any constraint or b) it reaches a constraint that - * is too weak to be satisfied using any of its methods. The - * variables of constraints that have been processed are marked with - * a unique mark value so that we know where we've been. This allows - * the algorithm to avoid getting into an infinite loop even if the - * constraint graph has an inadvertent cycle. - */ -Planner.prototype.incrementalAdd = function (c) { - var mark = this.newMark(); - var overridden = c.satisfy(mark); - while (overridden != null) - overridden = overridden.satisfy(mark); -} - -/** - * Entry point for retracting a constraint. Remove the given - * constraint and incrementally update the dataflow graph. - * Details: Retracting the given constraint may allow some currently - * unsatisfiable downstream constraint to be satisfied. We therefore collect - * a list of unsatisfied downstream constraints and attempt to - * satisfy each one in turn. This list is traversed by constraint - * strength, strongest first, as a heuristic for avoiding - * unnecessarily adding and then overriding weak constraints. - * Assume: c is satisfied. - */ -Planner.prototype.incrementalRemove = function (c) { - var out = c.output(); - c.markUnsatisfied(); - c.removeFromGraph(); - var unsatisfied = this.removePropagateFrom(out); - var strength = Strength.REQUIRED; - do { - for (var i = 0; i < unsatisfied.size(); i++) { - var u = unsatisfied.at(i); - if (u.strength == strength) - this.incrementalAdd(u); - } - strength = strength.nextWeaker(); - } while (strength != Strength.WEAKEST); -} - -/** - * Select a previously unused mark value. - */ -Planner.prototype.newMark = function () { - return ++this.currentMark; -} - -/** - * Extract a plan for resatisfaction starting from the given source - * constraints, usually a set of input constraints. This method - * assumes that stay optimization is desired; the plan will contain - * only constraints whose output variables are not stay. Constraints - * that do no computation, such as stay and edit constraints, are - * not included in the plan. - * Details: The outputs of a constraint are marked when it is added - * to the plan under construction. A constraint may be appended to - * the plan when all its input variables are known. A variable is - * known if either a) the variable is marked (indicating that has - * been computed by a constraint appearing earlier in the plan), b) - * the variable is 'stay' (i.e. it is a constant at plan execution - * time), or c) the variable is not determined by any - * constraint. The last provision is for past states of history - * variables, which are not stay but which are also not computed by - * any constraint. - * Assume: sources are all satisfied. - */ -Planner.prototype.makePlan = function (sources) { - var mark = this.newMark(); - var plan = new Plan(); - var todo = sources; - while (todo.size() > 0) { - var c = todo.removeFirst(); - if (c.output().mark != mark && c.inputsKnown(mark)) { - plan.addConstraint(c); - c.output().mark = mark; - this.addConstraintsConsumingTo(c.output(), todo); - } - } - return plan; -} - -/** - * Extract a plan for resatisfying starting from the output of the - * given constraints, usually a set of input constraints. - */ -Planner.prototype.extractPlanFromConstraints = function (constraints) { - var sources = new OrderedCollection(); - for (var i = 0; i < constraints.size(); i++) { - var c = constraints.at(i); - if (c.isInput() && c.isSatisfied()) - // not in plan already and eligible for inclusion - sources.add(c); - } - return this.makePlan(sources); -} - -/** - * Recompute the walkabout strengths and stay flags of all variables - * downstream of the given constraint and recompute the actual - * values of all variables whose stay flag is true. If a cycle is - * detected, remove the given constraint and answer - * false. Otherwise, answer true. - * Details: Cycles are detected when a marked variable is - * encountered downstream of the given constraint. The sender is - * assumed to have marked the inputs of the given constraint with - * the given mark. Thus, encountering a marked node downstream of - * the output constraint means that there is a path from the - * constraint's output to one of its inputs. - */ -Planner.prototype.addPropagate = function (c, mark) { - var todo = new OrderedCollection(); - todo.add(c); - while (todo.size() > 0) { - var d = todo.removeFirst(); - if (d.output().mark == mark) { - this.incrementalRemove(c); - return false; - } - d.recalculate(); - this.addConstraintsConsumingTo(d.output(), todo); - } - return true; -} - - -/** - * Update the walkabout strengths and stay flags of all variables - * downstream of the given constraint. Answer a collection of - * unsatisfied constraints sorted in order of decreasing strength. - */ -Planner.prototype.removePropagateFrom = function (out) { - out.determinedBy = null; - out.walkStrength = Strength.WEAKEST; - out.stay = true; - var unsatisfied = new OrderedCollection(); - var todo = new OrderedCollection(); - todo.add(out); - while (todo.size() > 0) { - var v = todo.removeFirst(); - for (var i = 0; i < v.constraints.size(); i++) { - var c = v.constraints.at(i); - if (!c.isSatisfied()) - unsatisfied.add(c); - } - var determining = v.determinedBy; - for (var i = 0; i < v.constraints.size(); i++) { - var next = v.constraints.at(i); - if (next != determining && next.isSatisfied()) { - next.recalculate(); - todo.add(next.output()); - } - } - } - return unsatisfied; -} - -Planner.prototype.addConstraintsConsumingTo = function (v, coll) { - var determining = v.determinedBy; - var cc = v.constraints; - for (var i = 0; i < cc.size(); i++) { - var c = cc.at(i); - if (c != determining && c.isSatisfied()) - coll.add(c); - } -} - -/* --- * - * P l a n - * --- */ - -/** - * A Plan is an ordered list of constraints to be executed in sequence - * to resatisfy all currently satisfiable constraints in the face of - * one or more changing inputs. - */ -function Plan() { - this.v = new OrderedCollection(); -} - -Plan.prototype.addConstraint = function (c) { - this.v.add(c); -} - -Plan.prototype.size = function () { - return this.v.size(); -} - -Plan.prototype.constraintAt = function (index) { - return this.v.at(index); -} - -Plan.prototype.execute = function () { - for (var i = 0; i < this.size(); i++) { - var c = this.constraintAt(i); - c.execute(); - } -} - -/* --- * - * M a i n - * --- */ - -/** - * This is the standard DeltaBlue benchmark. A long chain of equality - * constraints is constructed with a stay constraint on one end. An - * edit constraint is then added to the opposite end and the time is - * measured for adding and removing this constraint, and extracting - * and executing a constraint satisfaction plan. There are two cases. - * In case 1, the added constraint is stronger than the stay - * constraint and values must propagate down the entire length of the - * chain. In case 2, the added constraint is weaker than the stay - * constraint so it cannot be accomodated. The cost in this case is, - * of course, very low. Typical situations lie somewhere between these - * two extremes. - */ -function chainTest(n) { - planner = new Planner(); - var prev = null, first = null, last = null; - - // Build chain of n equality constraints - for (var i = 0; i <= n; i++) { - var name = "v" + i; - var v = new Variable(name); - if (prev != null) - new EqualityConstraint(prev, v, Strength.REQUIRED); - if (i == 0) first = v; - if (i == n) last = v; - prev = v; - } - - new StayConstraint(last, Strength.STRONG_DEFAULT); - var edit = new EditConstraint(first, Strength.PREFERRED); - var edits = new OrderedCollection(); - edits.add(edit); - var plan = planner.extractPlanFromConstraints(edits); - for (var i = 0; i < 100; i++) { - first.value = i; - plan.execute(); - if (last.value != i) - alert("Chain test failed."); - } -} - -/** - * This test constructs a two sets of variables related to each - * other by a simple linear transformation (scale and offset). The - * time is measured to change a variable on either side of the - * mapping and to change the scale and offset factors. - */ -function projectionTest(n) { - planner = new Planner(); - var scale = new Variable("scale", 10); - var offset = new Variable("offset", 1000); - var src = null, dst = null; - - var dests = new OrderedCollection(); - for (var i = 0; i < n; i++) { - src = new Variable("src" + i, i); - dst = new Variable("dst" + i, i); - dests.add(dst); - new StayConstraint(src, Strength.NORMAL); - new ScaleConstraint(src, scale, offset, dst, Strength.REQUIRED); - } - - change(src, 17); - if (dst.value != 1170) alert("Projection 1 failed"); - change(dst, 1050); - if (src.value != 5) alert("Projection 2 failed"); - change(scale, 5); - for (var i = 0; i < n - 1; i++) { - if (dests.at(i).value != i * 5 + 1000) - alert("Projection 3 failed"); - } - change(offset, 2000); - for (var i = 0; i < n - 1; i++) { - if (dests.at(i).value != i * 5 + 2000) - alert("Projection 4 failed"); - } -} - -function change(v, newValue) { - var edit = new EditConstraint(v, Strength.PREFERRED); - var edits = new OrderedCollection(); - edits.add(edit); - var plan = planner.extractPlanFromConstraints(edits); - for (var i = 0; i < 10; i++) { - v.value = newValue; - plan.execute(); - } - edit.destroyConstraint(); -} - -// Global variable holding the current planner. -var planner = null; - -function deltaBlue() { - chainTest(100); - projectionTest(100); -} diff --git a/regexp2000/benchmarks/earley-boyer.js b/regexp2000/benchmarks/earley-boyer.js deleted file mode 100644 index 9016a137a..000000000 --- a/regexp2000/benchmarks/earley-boyer.js +++ /dev/null @@ -1,4685 +0,0 @@ -// This file is automatically generated by scheme2js, except for the -// benchmark harness code at the beginning and end of the file. - -var EarleyBoyer = new BenchmarkSuite('EarleyBoyer', 765819, [ - new Benchmark("Earley", function () { BgL_earleyzd2benchmarkzd2(); }), - new Benchmark("Boyer", function () { BgL_nboyerzd2benchmarkzd2(); }) -]); - - -/************* GENERATED FILE - DO NOT EDIT *************/ -/************* GENERATED FILE - DO NOT EDIT *************/ -/************* GENERATED FILE - DO NOT EDIT *************/ -/************* GENERATED FILE - DO NOT EDIT *************/ -/************* GENERATED FILE - DO NOT EDIT *************/ -/************* GENERATED FILE - DO NOT EDIT *************/ -/************* GENERATED FILE - DO NOT EDIT *************/ -/************* GENERATED FILE - DO NOT EDIT *************/ -/* - * To use write/prints/... the default-output port has to be set first. - * Simply setting SC_DEFAULT_OUT and SC_ERROR_OUT to the desired values - * should do the trick. - * In the following example the std-out and error-port are redirected to - * a DIV. -function initRuntime() { - function escapeHTML(s) { - var tmp = s; - tmp = tmp.replace(/&/g, "&"); - tmp = tmp.replace(//g, ">"); - tmp = tmp.replace(/ /g, " "); - tmp = tmp.replace(/\n/g, "
"); - tmp = tmp.replace(/\t/g, "    "); - return tmp; - - } - - document.write("
"); - SC_DEFAULT_OUT = new sc_GenericOutputPort( - function(s) { - var stdout = document.getElementById('stdout'); - stdout.innerHTML = stdout.innerHTML + escapeHTML(s); - }); - SC_ERROR_OUT = SC_DEFAULT_OUT; -} -*/ - - -function sc_print_debug() { - sc_print.apply(null, arguments); -} -/*** META ((export *js*)) */ -var sc_JS_GLOBALS = this; - -var __sc_LINE=-1; -var __sc_FILE=""; - -/*** META ((export #t)) */ -function sc_alert() { - var len = arguments.length; - var s = ""; - var i; - - for( i = 0; i < len; i++ ) { - s += sc_toDisplayString(arguments[ i ]); - } - - return alert( s ); -} - -/*** META ((export #t)) */ -function sc_typeof( x ) { - return typeof x; -} - -/*** META ((export #t)) */ -function sc_error() { - var a = [sc_jsstring2symbol("*error*")]; - for (var i = 0; i < arguments.length; i++) { - a[i+1] = arguments[i]; - } - throw a; -} - -/*** META ((export #t) - (peephole (prefix "throw "))) -*/ -function sc_raise(obj) { - throw obj; -} - -/*** META ((export with-handler-lambda)) */ -function sc_withHandlerLambda(handler, body) { - try { - return body(); - } catch(e) { - if (!e._internalException) - return handler(e); - else - throw e; - } -} - -var sc_properties = new Object(); - -/*** META ((export #t)) */ -function sc_putpropBang(sym, key, val) { - var ht = sc_properties[sym]; - if (!ht) { - ht = new Object(); - sc_properties[sym] = ht; - } - ht[key] = val; -} - -/*** META ((export #t)) */ -function sc_getprop(sym, key) { - var ht = sc_properties[sym]; - if (ht) { - if (key in ht) - return ht[key]; - else - return false; - } else - return false; -} - -/*** META ((export #t)) */ -function sc_rempropBang(sym, key) { - var ht = sc_properties[sym]; - if (ht) - delete ht[key]; -} - -/*** META ((export #t)) */ -function sc_any2String(o) { - return jsstring2string(sc_toDisplayString(o)); -} - -/*** META ((export #t) - (peephole (infix 2 2 "===")) - (type bool)) -*/ -function sc_isEqv(o1, o2) { - return (o1 === o2); -} - -/*** META ((export #t) - (peephole (infix 2 2 "===")) - (type bool)) -*/ -function sc_isEq(o1, o2) { - return (o1 === o2); -} - -/*** META ((export #t) - (type bool)) -*/ -function sc_isNumber(n) { - return (typeof n === "number"); -} - -/*** META ((export #t) - (type bool)) -*/ -function sc_isComplex(n) { - return sc_isNumber(n); -} - -/*** META ((export #t) - (type bool)) -*/ -function sc_isReal(n) { - return sc_isNumber(n); -} - -/*** META ((export #t) - (type bool)) -*/ -function sc_isRational(n) { - return sc_isReal(n); -} - -/*** META ((export #t) - (type bool)) -*/ -function sc_isInteger(n) { - return (parseInt(n) === n); -} - -/*** META ((export #t) - (type bool) - (peephole (postfix ", false"))) -*/ -// we don't have exact numbers... -function sc_isExact(n) { - return false; -} - -/*** META ((export #t) - (peephole (postfix ", true")) - (type bool)) -*/ -function sc_isInexact(n) { - return true; -} - -/*** META ((export = =fx =fl) - (type bool) - (peephole (infix 2 2 "==="))) -*/ -function sc_equal(x) { - for (var i = 1; i < arguments.length; i++) - if (x !== arguments[i]) - return false; - return true; -} - -/*** META ((export < = arguments[i]) - return false; - x = arguments[i]; - } - return true; -} - -/*** META ((export > >fx >fl) - (type bool) - (peephole (infix 2 2 ">"))) -*/ -function sc_greater(x, y) { - for (var i = 1; i < arguments.length; i++) { - if (x <= arguments[i]) - return false; - x = arguments[i]; - } - return true; -} - -/*** META ((export <= <=fx <=fl) - (type bool) - (peephole (infix 2 2 "<="))) -*/ -function sc_lessEqual(x, y) { - for (var i = 1; i < arguments.length; i++) { - if (x > arguments[i]) - return false; - x = arguments[i]; - } - return true; -} - -/*** META ((export >= >=fl >=fx) - (type bool) - (peephole (infix 2 2 ">="))) -*/ -function sc_greaterEqual(x, y) { - for (var i = 1; i < arguments.length; i++) { - if (x < arguments[i]) - return false; - x = arguments[i]; - } - return true; -} - -/*** META ((export #t) - (type bool) - (peephole (postfix "=== 0"))) -*/ -function sc_isZero(x) { - return (x === 0); -} - -/*** META ((export #t) - (type bool) - (peephole (postfix "> 0"))) -*/ -function sc_isPositive(x) { - return (x > 0); -} - -/*** META ((export #t) - (type bool) - (peephole (postfix "< 0"))) -*/ -function sc_isNegative(x) { - return (x < 0); -} - -/*** META ((export #t) - (type bool) - (peephole (postfix "%2===1"))) -*/ -function sc_isOdd(x) { - return (x % 2 === 1); -} - -/*** META ((export #t) - (type bool) - (peephole (postfix "%2===0"))) -*/ -function sc_isEven(x) { - return (x % 2 === 0); -} - -/*** META ((export #t)) */ -var sc_max = Math.max; -/*** META ((export #t)) */ -var sc_min = Math.min; - -/*** META ((export + +fx +fl) - (peephole (infix 0 #f "+" "0"))) -*/ -function sc_plus() { - var sum = 0; - for (var i = 0; i < arguments.length; i++) - sum += arguments[i]; - return sum; -} - -/*** META ((export * *fx *fl) - (peephole (infix 0 #f "*" "1"))) -*/ -function sc_multi() { - var product = 1; - for (var i = 0; i < arguments.length; i++) - product *= arguments[i]; - return product; -} - -/*** META ((export - -fx -fl) - (peephole (minus))) -*/ -function sc_minus(x) { - if (arguments.length === 1) - return -x; - else { - var res = x; - for (var i = 1; i < arguments.length; i++) - res -= arguments[i]; - return res; - } -} - -/*** META ((export / /fl) - (peephole (div))) -*/ -function sc_div(x) { - if (arguments.length === 1) - return 1/x; - else { - var res = x; - for (var i = 1; i < arguments.length; i++) - res /= arguments[i]; - return res; - } -} - -/*** META ((export #t)) */ -var sc_abs = Math.abs; - -/*** META ((export quotient /fx) - (peephole (hole 2 "parseInt(" x "/" y ")"))) -*/ -function sc_quotient(x, y) { - return parseInt(x / y); -} - -/*** META ((export #t) - (peephole (infix 2 2 "%"))) -*/ -function sc_remainder(x, y) { - return x % y; -} - -/*** META ((export #t) - (peephole (modulo))) -*/ -function sc_modulo(x, y) { - var remainder = x % y; - // if they don't have the same sign - if ((remainder * y) < 0) - return remainder + y; - else - return remainder; -} - -function sc_euclid_gcd(a, b) { - var temp; - if (a === 0) return b; - if (b === 0) return a; - if (a < 0) {a = -a;}; - if (b < 0) {b = -b;}; - if (b > a) {temp = a; a = b; b = temp;}; - while (true) { - a %= b; - if(a === 0) {return b;}; - b %= a; - if(b === 0) {return a;}; - }; - return b; -} - -/*** META ((export #t)) */ -function sc_gcd() { - var gcd = 0; - for (var i = 0; i < arguments.length; i++) - gcd = sc_euclid_gcd(gcd, arguments[i]); - return gcd; -} - -/*** META ((export #t)) */ -function sc_lcm() { - var lcm = 1; - for (var i = 0; i < arguments.length; i++) { - var f = Math.round(arguments[i] / sc_euclid_gcd(arguments[i], lcm)); - lcm *= Math.abs(f); - } - return lcm; -} - -// LIMITATION: numerator and denominator don't make sense in floating point world. -//var SC_MAX_DECIMALS = 1000000 -// -// function sc_numerator(x) { -// var rounded = Math.round(x * SC_MAX_DECIMALS); -// return Math.round(rounded / sc_euclid_gcd(rounded, SC_MAX_DECIMALS)); -// } - -// function sc_denominator(x) { -// var rounded = Math.round(x * SC_MAX_DECIMALS); -// return Math.round(SC_MAX_DECIMALS / sc_euclid_gcd(rounded, SC_MAX_DECIMALS)); -// } - -/*** META ((export #t)) */ -var sc_floor = Math.floor; -/*** META ((export #t)) */ -var sc_ceiling = Math.ceil; -/*** META ((export #t)) */ -var sc_truncate = parseInt; -/*** META ((export #t)) */ -var sc_round = Math.round; - -// LIMITATION: sc_rationalize doesn't make sense in a floating point world. - -/*** META ((export #t)) */ -var sc_exp = Math.exp; -/*** META ((export #t)) */ -var sc_log = Math.log; -/*** META ((export #t)) */ -var sc_sin = Math.sin; -/*** META ((export #t)) */ -var sc_cos = Math.cos; -/*** META ((export #t)) */ -var sc_tan = Math.tan; -/*** META ((export #t)) */ -var sc_asin = Math.asin; -/*** META ((export #t)) */ -var sc_acos = Math.acos; -/*** META ((export #t)) */ -var sc_atan = Math.atan; - -/*** META ((export #t)) */ -var sc_sqrt = Math.sqrt; -/*** META ((export #t)) */ -var sc_expt = Math.pow; - -// LIMITATION: we don't have complex numbers. -// LIMITATION: the following functions are hence not implemented. -// LIMITATION: make-rectangular, make-polar, real-part, imag-part, magnitude, angle -// LIMITATION: 2 argument atan - -/*** META ((export #t) - (peephole (id))) -*/ -function sc_exact2inexact(x) { - return x; -} - -/*** META ((export #t) - (peephole (id))) -*/ -function sc_inexact2exact(x) { - return x; -} - -function sc_number2jsstring(x, radix) { - if (radix) - return x.toString(radix); - else - return x.toString(); -} - -function sc_jsstring2number(s, radix) { - if (s === "") return false; - - if (radix) { - var t = parseInt(s, radix); - if (!t && t !== 0) return false; - // verify that each char is in range. (parseInt ignores leading - // white and trailing chars) - var allowedChars = "01234567890abcdefghijklmnopqrstuvwxyz".substring(0, radix+1); - if ((new RegExp("^["+allowedChars+"]*$", "i")).test(s)) - return t; - else return false; - } else { - var t = +s; // does not ignore trailing chars. - if (!t && t !== 0) return false; - // simply verify that first char is not whitespace. - var c = s.charAt(0); - // if +c is 0, but the char is not "0", then we have a whitespace. - if (+c === 0 && c !== "0") return false; - return t; - } -} - -/*** META ((export #t) - (type bool) - (peephole (not))) -*/ -function sc_not(b) { - return b === false; -} - -/*** META ((export #t) - (type bool)) -*/ -function sc_isBoolean(b) { - return (b === true) || (b === false); -} - -function sc_Pair(car, cdr) { - this.car = car; - this.cdr = cdr; -} - -sc_Pair.prototype.toString = function() { - return sc_toDisplayString(this); -}; -sc_Pair.prototype.sc_toWriteOrDisplayString = function(writeOrDisplay) { - var current = this; - - var res = "("; - - while(true) { - res += writeOrDisplay(current.car); - if (sc_isPair(current.cdr)) { - res += " "; - current = current.cdr; - } else if (current.cdr !== null) { - res += " . " + writeOrDisplay(current.cdr); - break; - } else // current.cdr == null - break; - } - - res += ")"; - - return res; -}; -sc_Pair.prototype.sc_toDisplayString = function() { - return this.sc_toWriteOrDisplayString(sc_toDisplayString); -}; -sc_Pair.prototype.sc_toWriteString = function() { - return this.sc_toWriteOrDisplayString(sc_toWriteString); -}; -// sc_Pair.prototype.sc_toWriteCircleString in IO.js - -/*** META ((export #t) - (type bool) - (peephole (postfix " instanceof sc_Pair"))) -*/ -function sc_isPair(p) { - return (p instanceof sc_Pair); -} - -function sc_isPairEqual(p1, p2, comp) { - return (comp(p1.car, p2.car) && comp(p1.cdr, p2.cdr)); -} - -/*** META ((export #t) - (peephole (hole 2 "new sc_Pair(" car ", " cdr ")"))) -*/ -function sc_cons(car, cdr) { - return new sc_Pair(car, cdr); -} - -/*** META ((export cons*)) */ -function sc_consStar() { - var res = arguments[arguments.length - 1]; - for (var i = arguments.length-2; i >= 0; i--) - res = new sc_Pair(arguments[i], res); - return res; -} - -/*** META ((export #t) - (peephole (postfix ".car"))) -*/ -function sc_car(p) { - return p.car; -} - -/*** META ((export #t) - (peephole (postfix ".cdr"))) -*/ -function sc_cdr(p) { - return p.cdr; -} - -/*** META ((export #t) - (peephole (hole 2 p ".car = " val))) -*/ -function sc_setCarBang(p, val) { - p.car = val; -} - -/*** META ((export #t) - (peephole (hole 2 p ".cdr = " val))) -*/ -function sc_setCdrBang(p, val) { - p.cdr = val; -} - -/*** META ((export #t) - (peephole (postfix ".car.car"))) -*/ -function sc_caar(p) { return p.car.car; } -/*** META ((export #t) - (peephole (postfix ".cdr.car"))) -*/ -function sc_cadr(p) { return p.cdr.car; } -/*** META ((export #t) - (peephole (postfix ".car.cdr"))) -*/ -function sc_cdar(p) { return p.car.cdr; } -/*** META ((export #t) - (peephole (postfix ".cdr.cdr"))) -*/ -function sc_cddr(p) { return p.cdr.cdr; } -/*** META ((export #t) - (peephole (postfix ".car.car.car"))) -*/ -function sc_caaar(p) { return p.car.car.car; } -/*** META ((export #t) - (peephole (postfix ".car.cdr.car"))) -*/ -function sc_cadar(p) { return p.car.cdr.car; } -/*** META ((export #t) - (peephole (postfix ".cdr.car.car"))) -*/ -function sc_caadr(p) { return p.cdr.car.car; } -/*** META ((export #t) - (peephole (postfix ".cdr.cdr.car"))) -*/ -function sc_caddr(p) { return p.cdr.cdr.car; } -/*** META ((export #t) - (peephole (postfix ".car.car.cdr"))) -*/ -function sc_cdaar(p) { return p.car.car.cdr; } -/*** META ((export #t) - (peephole (postfix ".cdr.car.cdr"))) -*/ -function sc_cdadr(p) { return p.cdr.car.cdr; } -/*** META ((export #t) - (peephole (postfix ".car.cdr.cdr"))) -*/ -function sc_cddar(p) { return p.car.cdr.cdr; } -/*** META ((export #t) - (peephole (postfix ".cdr.cdr.cdr"))) -*/ -function sc_cdddr(p) { return p.cdr.cdr.cdr; } -/*** META ((export #t) - (peephole (postfix ".car.car.car.car"))) -*/ -function sc_caaaar(p) { return p.car.car.car.car; } -/*** META ((export #t) - (peephole (postfix ".car.cdr.car.car"))) -*/ -function sc_caadar(p) { return p.car.cdr.car.car; } -/*** META ((export #t) - (peephole (postfix ".cdr.car.car.car"))) -*/ -function sc_caaadr(p) { return p.cdr.car.car.car; } -/*** META ((export #t) - (peephole (postfix ".cdr.cdr.car.car"))) -*/ -function sc_caaddr(p) { return p.cdr.cdr.car.car; } -/*** META ((export #t) - (peephole (postfix ".car.car.car.cdr"))) -*/ -function sc_cdaaar(p) { return p.car.car.car.cdr; } -/*** META ((export #t) - (peephole (postfix ".car.cdr.car.cdr"))) -*/ -function sc_cdadar(p) { return p.car.cdr.car.cdr; } -/*** META ((export #t) - (peephole (postfix ".cdr.car.car.cdr"))) -*/ -function sc_cdaadr(p) { return p.cdr.car.car.cdr; } -/*** META ((export #t) - (peephole (postfix ".cdr.cdr.car.cdr"))) -*/ -function sc_cdaddr(p) { return p.cdr.cdr.car.cdr; } -/*** META ((export #t) - (peephole (postfix ".car.car.cdr.car"))) -*/ -function sc_cadaar(p) { return p.car.car.cdr.car; } -/*** META ((export #t) - (peephole (postfix ".car.cdr.cdr.car"))) -*/ -function sc_caddar(p) { return p.car.cdr.cdr.car; } -/*** META ((export #t) - (peephole (postfix ".cdr.car.cdr.car"))) -*/ -function sc_cadadr(p) { return p.cdr.car.cdr.car; } -/*** META ((export #t) - (peephole (postfix ".cdr.cdr.cdr.car"))) -*/ -function sc_cadddr(p) { return p.cdr.cdr.cdr.car; } -/*** META ((export #t) - (peephole (postfix ".car.car.cdr.cdr"))) -*/ -function sc_cddaar(p) { return p.car.car.cdr.cdr; } -/*** META ((export #t) - (peephole (postfix ".car.cdr.cdr.cdr"))) -*/ -function sc_cdddar(p) { return p.car.cdr.cdr.cdr; } -/*** META ((export #t) - (peephole (postfix ".cdr.car.cdr.cdr"))) -*/ -function sc_cddadr(p) { return p.cdr.car.cdr.cdr; } -/*** META ((export #t) - (peephole (postfix ".cdr.cdr.cdr.cdr"))) -*/ -function sc_cddddr(p) { return p.cdr.cdr.cdr.cdr; } - -/*** META ((export #t)) */ -function sc_lastPair(l) { - if (!sc_isPair(l)) sc_error("sc_lastPair: pair expected"); - var res = l; - var cdr = l.cdr; - while (sc_isPair(cdr)) { - res = cdr; - cdr = res.cdr; - } - return res; -} - -/*** META ((export #t) - (type bool) - (peephole (postfix " === null"))) -*/ -function sc_isNull(o) { - return (o === null); -} - -/*** META ((export #t) - (type bool)) -*/ -function sc_isList(o) { - var rabbit; - var turtle; - - var rabbit = o; - var turtle = o; - while (true) { - if (rabbit === null || - (rabbit instanceof sc_Pair && rabbit.cdr === null)) - return true; // end of list - else if ((rabbit instanceof sc_Pair) && - (rabbit.cdr instanceof sc_Pair)) { - rabbit = rabbit.cdr.cdr; - turtle = turtle.cdr; - if (rabbit === turtle) return false; // cycle - } else - return false; // not pair - } -} - -/*** META ((export #t)) */ -function sc_list() { - var res = null; - var a = arguments; - for (var i = a.length-1; i >= 0; i--) - res = new sc_Pair(a[i], res); - return res; -} - -/*** META ((export #t)) */ -function sc_iota(num, init) { - var res = null; - if (!init) init = 0; - for (var i = num - 1; i >= 0; i--) - res = new sc_Pair(i + init, res); - return res; -} - -/*** META ((export #t)) */ -function sc_makeList(nbEls, fill) { - var res = null; - for (var i = 0; i < nbEls; i++) - res = new sc_Pair(fill, res); - return res; -} - -/*** META ((export #t)) */ -function sc_length(l) { - var res = 0; - while (l !== null) { - res++; - l = l.cdr; - } - return res; -} - -/*** META ((export #t)) */ -function sc_remq(o, l) { - var dummy = { cdr : null }; - var tail = dummy; - while (l !== null) { - if (l.car !== o) { - tail.cdr = sc_cons(l.car, null); - tail = tail.cdr; - } - l = l.cdr; - } - return dummy.cdr; -} - -/*** META ((export #t)) */ -function sc_remqBang(o, l) { - var dummy = { cdr : null }; - var tail = dummy; - var needsAssig = true; - while (l !== null) { - if (l.car === o) { - needsAssig = true; - } else { - if (needsAssig) { - tail.cdr = l; - needsAssig = false; - } - tail = l; - } - l = l.cdr; - } - tail.cdr = null; - return dummy.cdr; -} - -/*** META ((export #t)) */ -function sc_delete(o, l) { - var dummy = { cdr : null }; - var tail = dummy; - while (l !== null) { - if (!sc_isEqual(l.car, o)) { - tail.cdr = sc_cons(l.car, null); - tail = tail.cdr; - } - l = l.cdr; - } - return dummy.cdr; -} - -/*** META ((export #t)) */ -function sc_deleteBang(o, l) { - var dummy = { cdr : null }; - var tail = dummy; - var needsAssig = true; - while (l !== null) { - if (sc_isEqual(l.car, o)) { - needsAssig = true; - } else { - if (needsAssig) { - tail.cdr = l; - needsAssig = false; - } - tail = l; - } - l = l.cdr; - } - tail.cdr = null; - return dummy.cdr; -} - -function sc_reverseAppendBang(l1, l2) { - var res = l2; - while (l1 !== null) { - var tmp = res; - res = l1; - l1 = l1.cdr; - res.cdr = tmp; - } - return res; -} - -function sc_dualAppend(l1, l2) { - if (l1 === null) return l2; - if (l2 === null) return l1; - var rev = sc_reverse(l1); - return sc_reverseAppendBang(rev, l2); -} - -/*** META ((export #t)) */ -function sc_append() { - if (arguments.length === 0) - return null; - var res = arguments[arguments.length - 1]; - for (var i = arguments.length - 2; i >= 0; i--) - res = sc_dualAppend(arguments[i], res); - return res; -} - -function sc_dualAppendBang(l1, l2) { - if (l1 === null) return l2; - if (l2 === null) return l1; - var tmp = l1; - while (tmp.cdr !== null) tmp=tmp.cdr; - tmp.cdr = l2; - return l1; -} - -/*** META ((export #t)) */ -function sc_appendBang() { - var res = null; - for (var i = 0; i < arguments.length; i++) - res = sc_dualAppendBang(res, arguments[i]); - return res; -} - -/*** META ((export #t)) */ -function sc_reverse(l1) { - var res = null; - while (l1 !== null) { - res = sc_cons(l1.car, res); - l1 = l1.cdr; - } - return res; -} - -/*** META ((export #t)) */ -function sc_reverseBang(l) { - return sc_reverseAppendBang(l, null); -} - -/*** META ((export #t)) */ -function sc_listTail(l, k) { - var res = l; - for (var i = 0; i < k; i++) { - res = res.cdr; - } - return res; -} - -/*** META ((export #t)) */ -function sc_listRef(l, k) { - return sc_listTail(l, k).car; -} - -/* // unoptimized generic versions -function sc_memX(o, l, comp) { - while (l != null) { - if (comp(l.car, o)) - return l; - l = l.cdr; - } - return false; -} -function sc_memq(o, l) { return sc_memX(o, l, sc_isEq); } -function sc_memv(o, l) { return sc_memX(o, l, sc_isEqv); } -function sc_member(o, l) { return sc_memX(o, l, sc_isEqual); } -*/ - -/* optimized versions */ -/*** META ((export #t)) */ -function sc_memq(o, l) { - while (l !== null) { - if (l.car === o) - return l; - l = l.cdr; - } - return false; -} -/*** META ((export #t)) */ -function sc_memv(o, l) { - while (l !== null) { - if (l.car === o) - return l; - l = l.cdr; - } - return false; -} -/*** META ((export #t)) */ -function sc_member(o, l) { - while (l !== null) { - if (sc_isEqual(l.car,o)) - return l; - l = l.cdr; - } - return false; -} - -/* // generic unoptimized versions -function sc_assX(o, al, comp) { - while (al != null) { - if (comp(al.car.car, o)) - return al.car; - al = al.cdr; - } - return false; -} -function sc_assq(o, al) { return sc_assX(o, al, sc_isEq); } -function sc_assv(o, al) { return sc_assX(o, al, sc_isEqv); } -function sc_assoc(o, al) { return sc_assX(o, al, sc_isEqual); } -*/ -// optimized versions -/*** META ((export #t)) */ -function sc_assq(o, al) { - while (al !== null) { - if (al.car.car === o) - return al.car; - al = al.cdr; - } - return false; -} -/*** META ((export #t)) */ -function sc_assv(o, al) { - while (al !== null) { - if (al.car.car === o) - return al.car; - al = al.cdr; - } - return false; -} -/*** META ((export #t)) */ -function sc_assoc(o, al) { - while (al !== null) { - if (sc_isEqual(al.car.car, o)) - return al.car; - al = al.cdr; - } - return false; -} - -/* can be used for mutable strings and characters */ -function sc_isCharStringEqual(cs1, cs2) { return cs1.val === cs2.val; } -function sc_isCharStringLess(cs1, cs2) { return cs1.val < cs2.val; } -function sc_isCharStringGreater(cs1, cs2) { return cs1.val > cs2.val; } -function sc_isCharStringLessEqual(cs1, cs2) { return cs1.val <= cs2.val; } -function sc_isCharStringGreaterEqual(cs1, cs2) { return cs1.val >= cs2.val; } -function sc_isCharStringCIEqual(cs1, cs2) - { return cs1.val.toLowerCase() === cs2.val.toLowerCase(); } -function sc_isCharStringCILess(cs1, cs2) - { return cs1.val.toLowerCase() < cs2.val.toLowerCase(); } -function sc_isCharStringCIGreater(cs1, cs2) - { return cs1.val.toLowerCase() > cs2.val.toLowerCase(); } -function sc_isCharStringCILessEqual(cs1, cs2) - { return cs1.val.toLowerCase() <= cs2.val.toLowerCase(); } -function sc_isCharStringCIGreaterEqual(cs1, cs2) - { return cs1.val.toLowerCase() >= cs2.val.toLowerCase(); } - - - - -function sc_Char(c) { - var cached = sc_Char.lazy[c]; - if (cached) - return cached; - this.val = c; - sc_Char.lazy[c] = this; - // add return, so FF does not complain. - return undefined; -} -sc_Char.lazy = new Object(); -// thanks to Eric -sc_Char.char2readable = { - "\000": "#\\null", - "\007": "#\\bell", - "\010": "#\\backspace", - "\011": "#\\tab", - "\012": "#\\newline", - "\014": "#\\page", - "\015": "#\\return", - "\033": "#\\escape", - "\040": "#\\space", - "\177": "#\\delete", - - /* poeticless names */ - "\001": "#\\soh", - "\002": "#\\stx", - "\003": "#\\etx", - "\004": "#\\eot", - "\005": "#\\enq", - "\006": "#\\ack", - - "\013": "#\\vt", - "\016": "#\\so", - "\017": "#\\si", - - "\020": "#\\dle", - "\021": "#\\dc1", - "\022": "#\\dc2", - "\023": "#\\dc3", - "\024": "#\\dc4", - "\025": "#\\nak", - "\026": "#\\syn", - "\027": "#\\etb", - - "\030": "#\\can", - "\031": "#\\em", - "\032": "#\\sub", - "\033": "#\\esc", - "\034": "#\\fs", - "\035": "#\\gs", - "\036": "#\\rs", - "\037": "#\\us"}; - -sc_Char.readable2char = { - "null": "\000", - "bell": "\007", - "backspace": "\010", - "tab": "\011", - "newline": "\012", - "page": "\014", - "return": "\015", - "escape": "\033", - "space": "\040", - "delete": "\000", - "soh": "\001", - "stx": "\002", - "etx": "\003", - "eot": "\004", - "enq": "\005", - "ack": "\006", - "bel": "\007", - "bs": "\010", - "ht": "\011", - "nl": "\012", - "vt": "\013", - "np": "\014", - "cr": "\015", - "so": "\016", - "si": "\017", - "dle": "\020", - "dc1": "\021", - "dc2": "\022", - "dc3": "\023", - "dc4": "\024", - "nak": "\025", - "syn": "\026", - "etb": "\027", - "can": "\030", - "em": "\031", - "sub": "\032", - "esc": "\033", - "fs": "\034", - "gs": "\035", - "rs": "\036", - "us": "\037", - "sp": "\040", - "del": "\177"}; - -sc_Char.prototype.toString = function() { - return this.val; -}; -// sc_toDisplayString == toString -sc_Char.prototype.sc_toWriteString = function() { - var entry = sc_Char.char2readable[this.val]; - if (entry) - return entry; - else - return "#\\" + this.val; -}; - -/*** META ((export #t) - (type bool) - (peephole (postfix "instanceof sc_Char"))) -*/ -function sc_isChar(c) { - return (c instanceof sc_Char); -} - -/*** META ((export char=?) - (type bool) - (peephole (hole 2 c1 ".val === " c2 ".val"))) -*/ -var sc_isCharEqual = sc_isCharStringEqual; -/*** META ((export char?) - (type bool) - (peephole (hole 2 c1 ".val > " c2 ".val"))) -*/ -var sc_isCharGreater = sc_isCharStringGreater; -/*** META ((export char<=?) - (type bool) - (peephole (hole 2 c1 ".val <= " c2 ".val"))) -*/ -var sc_isCharLessEqual = sc_isCharStringLessEqual; -/*** META ((export char>=?) - (type bool) - (peephole (hole 2 c1 ".val >= " c2 ".val"))) -*/ -var sc_isCharGreaterEqual = sc_isCharStringGreaterEqual; -/*** META ((export char-ci=?) - (type bool) - (peephole (hole 2 c1 ".val.toLowerCase() === " c2 ".val.toLowerCase()"))) -*/ -var sc_isCharCIEqual = sc_isCharStringCIEqual; -/*** META ((export char-ci?) - (type bool) - (peephole (hole 2 c1 ".val.toLowerCase() > " c2 ".val.toLowerCase()"))) -*/ -var sc_isCharCIGreater = sc_isCharStringCIGreater; -/*** META ((export char-ci<=?) - (type bool) - (peephole (hole 2 c1 ".val.toLowerCase() <= " c2 ".val.toLowerCase()"))) -*/ -var sc_isCharCILessEqual = sc_isCharStringCILessEqual; -/*** META ((export char-ci>=?) - (type bool) - (peephole (hole 2 c1 ".val.toLowerCase() >= " c2 ".val.toLowerCase()"))) -*/ -var sc_isCharCIGreaterEqual = sc_isCharStringCIGreaterEqual; - -var SC_NUMBER_CLASS = "0123456789"; -var SC_WHITESPACE_CLASS = ' \r\n\t\f'; -var SC_LOWER_CLASS = 'abcdefghijklmnopqrstuvwxyz'; -var SC_UPPER_CLASS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; - -function sc_isCharOfClass(c, cl) { return (cl.indexOf(c) != -1); } -/*** META ((export #t) - (type bool)) -*/ -function sc_isCharAlphabetic(c) - { return sc_isCharOfClass(c.val, SC_LOWER_CLASS) || - sc_isCharOfClass(c.val, SC_UPPER_CLASS); } -/*** META ((export #t) - (type bool) - (peephole (hole 1 "SC_NUMBER_CLASS.indexOf(" c ".val) != -1"))) -*/ -function sc_isCharNumeric(c) - { return sc_isCharOfClass(c.val, SC_NUMBER_CLASS); } -/*** META ((export #t) - (type bool)) -*/ -function sc_isCharWhitespace(c) { - var tmp = c.val; - return tmp === " " || tmp === "\r" || tmp === "\n" || tmp === "\t" || tmp === "\f"; -} -/*** META ((export #t) - (type bool) - (peephole (hole 1 "SC_UPPER_CLASS.indexOf(" c ".val) != -1"))) -*/ -function sc_isCharUpperCase(c) - { return sc_isCharOfClass(c.val, SC_UPPER_CLASS); } -/*** META ((export #t) - (type bool) - (peephole (hole 1 "SC_LOWER_CLASS.indexOf(" c ".val) != -1"))) -*/ -function sc_isCharLowerCase(c) - { return sc_isCharOfClass(c.val, SC_LOWER_CLASS); } - -/*** META ((export #t) - (peephole (postfix ".val.charCodeAt(0)"))) -*/ -function sc_char2integer(c) - { return c.val.charCodeAt(0); } -/*** META ((export #t) - (peephole (hole 1 "new sc_Char(String.fromCharCode(" n "))"))) -*/ -function sc_integer2char(n) - { return new sc_Char(String.fromCharCode(n)); } - -/*** META ((export #t) - (peephole (hole 1 "new sc_Char(" c ".val.toUpperCase())"))) -*/ -function sc_charUpcase(c) - { return new sc_Char(c.val.toUpperCase()); } -/*** META ((export #t) - (peephole (hole 1 "new sc_Char(" c ".val.toLowerCase())"))) -*/ -function sc_charDowncase(c) - { return new sc_Char(c.val.toLowerCase()); } - -function sc_makeJSStringOfLength(k, c) { - var fill; - if (c === undefined) - fill = " "; - else - fill = c; - var res = ""; - var len = 1; - // every round doubles the size of fill. - while (k >= len) { - if (k & len) - res = res.concat(fill); - fill = fill.concat(fill); - len *= 2; - } - return res; -} - -function sc_makejsString(k, c) { - var fill; - if (c) - fill = c.val; - else - fill = " "; - return sc_makeJSStringOfLength(k, fill); -} - -function sc_jsstring2list(s) { - var res = null; - for (var i = s.length - 1; i >= 0; i--) - res = sc_cons(new sc_Char(s.charAt(i)), res); - return res; -} - -function sc_list2jsstring(l) { - var a = new Array(); - while(l !== null) { - a.push(l.car.val); - l = l.cdr; - } - return "".concat.apply("", a); -} - -var sc_Vector = Array; - -sc_Vector.prototype.sc_toWriteOrDisplayString = function(writeOrDisplay) { - if (this.length === 0) return "#()"; - - var res = "#(" + writeOrDisplay(this[0]); - for (var i = 1; i < this.length; i++) - res += " " + writeOrDisplay(this[i]); - res += ")"; - return res; -}; -sc_Vector.prototype.sc_toDisplayString = function() { - return this.sc_toWriteOrDisplayString(sc_toDisplayString); -}; -sc_Vector.prototype.sc_toWriteString = function() { - return this.sc_toWriteOrDisplayString(sc_toWriteString); -}; - -/*** META ((export vector? array?) - (type bool) - (peephole (postfix " instanceof sc_Vector"))) -*/ -function sc_isVector(v) { - return (v instanceof sc_Vector); -} - -// only applies to vectors -function sc_isVectorEqual(v1, v2, comp) { - if (v1.length !== v2.length) return false; - for (var i = 0; i < v1.length; i++) - if (!comp(v1[i], v2[i])) return false; - return true; -} - -/*** META ((export make-vector make-array)) */ -function sc_makeVector(size, fill) { - var a = new sc_Vector(size); - if (fill !== undefined) - sc_vectorFillBang(a, fill); - return a; -} - -/*** META ((export vector array) - (peephole (vector))) -*/ -function sc_vector() { - var a = new sc_Vector(); - for (var i = 0; i < arguments.length; i++) - a.push(arguments[i]); - return a; -} - -/*** META ((export vector-length array-length) - (peephole (postfix ".length"))) -*/ -function sc_vectorLength(v) { - return v.length; -} - -/*** META ((export vector-ref array-ref) - (peephole (hole 2 v "[" pos "]"))) -*/ -function sc_vectorRef(v, pos) { - return v[pos]; -} - -/*** META ((export vector-set! array-set!) - (peephole (hole 3 v "[" pos "] = " val))) -*/ -function sc_vectorSetBang(v, pos, val) { - v[pos] = val; -} - -/*** META ((export vector->list array->list)) */ -function sc_vector2list(a) { - var res = null; - for (var i = a.length-1; i >= 0; i--) - res = sc_cons(a[i], res); - return res; -} - -/*** META ((export list->vector list->array)) */ -function sc_list2vector(l) { - var a = new sc_Vector(); - while(l !== null) { - a.push(l.car); - l = l.cdr; - } - return a; -} - -/*** META ((export vector-fill! array-fill!)) */ -function sc_vectorFillBang(a, fill) { - for (var i = 0; i < a.length; i++) - a[i] = fill; -} - - -/*** META ((export #t)) */ -function sc_copyVector(a, len) { - if (len <= a.length) - return a.slice(0, len); - else { - var tmp = a.concat(); - tmp.length = len; - return tmp; - } -} - -/*** META ((export #t) - (peephole (hole 3 a ".slice(" start "," end ")"))) -*/ -function sc_vectorCopy(a, start, end) { - return a.slice(start, end); -} - -/*** META ((export #t)) */ -function sc_vectorCopyBang(target, tstart, source, sstart, send) { - if (!sstart) sstart = 0; - if (!send) send = source.length; - - // if target == source we don't want to overwrite not yet copied elements. - if (tstart <= sstart) { - for (var i = tstart, j = sstart; j < send; i++, j++) { - target[i] = source[j]; - } - } else { - var diff = send - sstart; - for (var i = tstart + diff - 1, j = send - 1; - j >= sstart; - i--, j--) { - target[i] = source[j]; - } - } - return target; -} - -/*** META ((export #t) - (type bool) - (peephole (hole 1 "typeof " o " === 'function'"))) -*/ -function sc_isProcedure(o) { - return (typeof o === "function"); -} - -/*** META ((export #t)) */ -function sc_apply(proc) { - var args = new Array(); - // first part of arguments are not in list-form. - for (var i = 1; i < arguments.length - 1; i++) - args.push(arguments[i]); - var l = arguments[arguments.length - 1]; - while (l !== null) { - args.push(l.car); - l = l.cdr; - } - return proc.apply(null, args); -} - -/*** META ((export #t)) */ -function sc_map(proc, l1) { - if (l1 === undefined) - return null; - // else - var nbApplyArgs = arguments.length - 1; - var applyArgs = new Array(nbApplyArgs); - var revres = null; - while (l1 !== null) { - for (var i = 0; i < nbApplyArgs; i++) { - applyArgs[i] = arguments[i + 1].car; - arguments[i + 1] = arguments[i + 1].cdr; - } - revres = sc_cons(proc.apply(null, applyArgs), revres); - } - return sc_reverseAppendBang(revres, null); -} - -/*** META ((export #t)) */ -function sc_mapBang(proc, l1) { - if (l1 === undefined) - return null; - // else - var l1_orig = l1; - var nbApplyArgs = arguments.length - 1; - var applyArgs = new Array(nbApplyArgs); - while (l1 !== null) { - var tmp = l1; - for (var i = 0; i < nbApplyArgs; i++) { - applyArgs[i] = arguments[i + 1].car; - arguments[i + 1] = arguments[i + 1].cdr; - } - tmp.car = proc.apply(null, applyArgs); - } - return l1_orig; -} - -/*** META ((export #t)) */ -function sc_forEach(proc, l1) { - if (l1 === undefined) - return undefined; - // else - var nbApplyArgs = arguments.length - 1; - var applyArgs = new Array(nbApplyArgs); - while (l1 !== null) { - for (var i = 0; i < nbApplyArgs; i++) { - applyArgs[i] = arguments[i + 1].car; - arguments[i + 1] = arguments[i + 1].cdr; - } - proc.apply(null, applyArgs); - } - // add return so FF does not complain. - return undefined; -} - -/*** META ((export #t)) */ -function sc_filter(proc, l1) { - var dummy = { cdr : null }; - var tail = dummy; - while (l1 !== null) { - if (proc(l1.car) !== false) { - tail.cdr = sc_cons(l1.car, null); - tail = tail.cdr; - } - l1 = l1.cdr; - } - return dummy.cdr; -} - -/*** META ((export #t)) */ -function sc_filterBang(proc, l1) { - var head = sc_cons("dummy", l1); - var it = head; - var next = l1; - while (next !== null) { - if (proc(next.car) !== false) { - it.cdr = next - it = next; - } - next = next.cdr; - } - it.cdr = null; - return head.cdr; -} - -function sc_filterMap1(proc, l1) { - var revres = null; - while (l1 !== null) { - var tmp = proc(l1.car) - if (tmp !== false) revres = sc_cons(tmp, revres); - l1 = l1.cdr; - } - return sc_reverseAppendBang(revres, null); -} -function sc_filterMap2(proc, l1, l2) { - var revres = null; - while (l1 !== null) { - var tmp = proc(l1.car, l2.car); - if(tmp !== false) revres = sc_cons(tmp, revres); - l1 = l1.cdr; - l2 = l2.cdr - } - return sc_reverseAppendBang(revres, null); -} - -/*** META ((export #t)) */ -function sc_filterMap(proc, l1, l2, l3) { - if (l2 === undefined) - return sc_filterMap1(proc, l1); - else if (l3 === undefined) - return sc_filterMap2(proc, l1, l2); - // else - var nbApplyArgs = arguments.length - 1; - var applyArgs = new Array(nbApplyArgs); - var revres = null; - while (l1 !== null) { - for (var i = 0; i < nbApplyArgs; i++) { - applyArgs[i] = arguments[i + 1].car; - arguments[i + 1] = arguments[i + 1].cdr; - } - var tmp = proc.apply(null, applyArgs); - if(tmp !== false) revres = sc_cons(tmp, revres); - } - return sc_reverseAppendBang(revres, null); -} - -/*** META ((export #t)) */ -function sc_any(proc, l) { - var revres = null; - while (l !== null) { - var tmp = proc(l.car); - if(tmp !== false) return tmp; - l = l.cdr; - } - return false; -} - -/*** META ((export any?) - (peephole (hole 2 "sc_any(" proc "," l ") !== false"))) -*/ -function sc_anyPred(proc, l) { - return sc_any(proc, l)!== false; -} - -/*** META ((export #t)) */ -function sc_every(proc, l) { - var revres = null; - var tmp = true; - while (l !== null) { - tmp = proc(l.car); - if (tmp === false) return false; - l = l.cdr; - } - return tmp; -} - -/*** META ((export every?) - (peephole (hole 2 "sc_every(" proc "," l ") !== false"))) -*/ -function sc_everyPred(proc, l) { - var tmp = sc_every(proc, l); - if (tmp !== false) return true; - return false; -} - -/*** META ((export #t) - (peephole (postfix "()"))) -*/ -function sc_force(o) { - return o(); -} - -/*** META ((export #t)) */ -function sc_makePromise(proc) { - var isResultReady = false; - var result = undefined; - return function() { - if (!isResultReady) { - var tmp = proc(); - if (!isResultReady) { - isResultReady = true; - result = tmp; - } - } - return result; - }; -} - -function sc_Values(values) { - this.values = values; -} - -/*** META ((export #t) - (peephole (values))) -*/ -function sc_values() { - if (arguments.length === 1) - return arguments[0]; - else - return new sc_Values(arguments); -} - -/*** META ((export #t)) */ -function sc_callWithValues(producer, consumer) { - var produced = producer(); - if (produced instanceof sc_Values) - return consumer.apply(null, produced.values); - else - return consumer(produced); -} - -/*** META ((export #t)) */ -function sc_dynamicWind(before, thunk, after) { - before(); - try { - var res = thunk(); - return res; - } finally { - after(); - } -} - - -// TODO: eval/scheme-report-environment/null-environment/interaction-environment - -// LIMITATION: 'load' doesn't exist without files. -// LIMITATION: transcript-on/transcript-off doesn't exist without files. - - -function sc_Struct(name) { - this.name = name; -} -sc_Struct.prototype.sc_toDisplayString = function() { - return "#"; -}; -sc_Struct.prototype.sc_toWriteString = sc_Struct.prototype.sc_toDisplayString; - -/*** META ((export #t) - (peephole (hole 1 "new sc_Struct(" name ")"))) -*/ -function sc_makeStruct(name) { - return new sc_Struct(name); -} - -/*** META ((export #t) - (type bool) - (peephole (postfix " instanceof sc_Struct"))) -*/ -function sc_isStruct(o) { - return (o instanceof sc_Struct); -} - -/*** META ((export #t) - (type bool) - (peephole (hole 2 "(" 1 " instanceof sc_Struct) && ( " 1 ".name === " 0 ")"))) -*/ -function sc_isStructNamed(name, s) { - return ((s instanceof sc_Struct) && (s.name === name)); -} - -/*** META ((export struct-field) - (peephole (hole 3 0 "[" 2 "]"))) -*/ -function sc_getStructField(s, name, field) { - return s[field]; -} - -/*** META ((export struct-field-set!) - (peephole (hole 4 0 "[" 2 "] = " 3))) -*/ -function sc_setStructFieldBang(s, name, field, val) { - s[field] = val; -} - -/*** META ((export #t) - (peephole (prefix "~"))) -*/ -function sc_bitNot(x) { - return ~x; -} - -/*** META ((export #t) - (peephole (infix 2 2 "&"))) -*/ -function sc_bitAnd(x, y) { - return x & y; -} - -/*** META ((export #t) - (peephole (infix 2 2 "|"))) -*/ -function sc_bitOr(x, y) { - return x | y; -} - -/*** META ((export #t) - (peephole (infix 2 2 "^"))) -*/ -function sc_bitXor(x, y) { - return x ^ y; -} - -/*** META ((export #t) - (peephole (infix 2 2 "<<"))) -*/ -function sc_bitLsh(x, y) { - return x << y; -} - -/*** META ((export #t) - (peephole (infix 2 2 ">>"))) -*/ -function sc_bitRsh(x, y) { - return x >> y; -} - -/*** META ((export #t) - (peephole (infix 2 2 ">>>"))) -*/ -function sc_bitUrsh(x, y) { - return x >>> y; -} - -/*** META ((export js-field js-property) - (peephole (hole 2 o "[" field "]"))) -*/ -function sc_jsField(o, field) { - return o[field]; -} - -/*** META ((export js-field-set! js-property-set!) - (peephole (hole 3 o "[" field "] = " val))) -*/ -function sc_setJsFieldBang(o, field, val) { - return o[field] = val; -} - -/*** META ((export js-field-delete! js-property-delete!) - (peephole (hole 2 "delete" o "[" field "]"))) -*/ -function sc_deleteJsFieldBang(o, field) { - delete o[field]; -} - -/*** META ((export #t) - (peephole (jsCall))) -*/ -function sc_jsCall(o, fun) { - var args = new Array(); - for (var i = 2; i < arguments.length; i++) - args[i-2] = arguments[i]; - return fun.apply(o, args); -} - -/*** META ((export #t) - (peephole (jsMethodCall))) -*/ -function sc_jsMethodCall(o, field) { - var args = new Array(); - for (var i = 2; i < arguments.length; i++) - args[i-2] = arguments[i]; - return o[field].apply(o, args); -} - -/*** META ((export new js-new) - (peephole (jsNew))) -*/ -function sc_jsNew(c) { - var evalStr = "new c("; - evalStr +=arguments.length > 1? "arguments[1]": ""; - for (var i = 2; i < arguments.length; i++) - evalStr += ", arguments[" + i + "]"; - evalStr +=")"; - return eval(evalStr); -} - -// ======================== RegExp ==================== -/*** META ((export #t)) */ -function sc_pregexp(re) { - return new RegExp(sc_string2jsstring(re)); -} - -/*** META ((export #t)) */ -function sc_pregexpMatch(re, s) { - var reg = (re instanceof RegExp) ? re : sc_pregexp(re); - var tmp = reg.exec(sc_string2jsstring(s)); - - if (tmp == null) return false; - - var res = null; - for (var i = tmp.length-1; i >= 0; i--) { - if (tmp[i] !== null) { - res = sc_cons(sc_jsstring2string(tmp[i]), res); - } else { - res = sc_cons(false, res); - } - } - return res; -} - -/*** META ((export #t)) */ -function sc_pregexpReplace(re, s1, s2) { - var reg; - var jss1 = sc_string2jsstring(s1); - var jss2 = sc_string2jsstring(s2); - - if (re instanceof RegExp) { - if (re.global) - reg = re; - else - reg = new RegExp(re.source); - } else { - reg = new RegExp(sc_string2jsstring(re)); - } - - return jss1.replace(reg, jss2); -} - -/*** META ((export pregexp-replace*)) */ -function sc_pregexpReplaceAll(re, s1, s2) { - var reg; - var jss1 = sc_string2jsstring(s1); - var jss2 = sc_string2jsstring(s2); - - if (re instanceof RegExp) { - if (re.global) - reg = re; - else - reg = new RegExp(re.source, "g"); - } else { - reg = new RegExp(sc_string2jsstring(re), "g"); - } - - return jss1.replace(reg, jss2); -} - -/*** META ((export #t)) */ -function sc_pregexpSplit(re, s) { - var reg = ((re instanceof RegExp) ? - re : - new RegExp(sc_string2jsstring(re))); - var jss = sc_string2jsstring(s); - var tmp = jss.split(reg); - - if (tmp == null) return false; - - return sc_vector2list(tmp); -} - - -/* =========================================================================== */ -/* Other library stuff */ -/* =========================================================================== */ - -/*** META ((export #t) - (peephole (hole 1 "Math.floor(Math.random()*" 'n ")"))) -*/ -function sc_random(n) { - return Math.floor(Math.random()*n); -} - -/*** META ((export current-date) - (peephole (hole 0 "new Date()"))) -*/ -function sc_currentDate() { - return new Date(); -} - -function sc_Hashtable() { -} -sc_Hashtable.prototype.toString = function() { - return "#{%hashtable}"; -}; -// sc_toWriteString == sc_toDisplayString == toString - -function sc_HashtableElement(key, val) { - this.key = key; - this.val = val; -} - -/*** META ((export #t) - (peephole (hole 0 "new sc_Hashtable()"))) -*/ -function sc_makeHashtable() { - return new sc_Hashtable(); -} - -/*** META ((export #t)) */ -function sc_hashtablePutBang(ht, key, val) { - var hash = sc_hash(key); - ht[hash] = new sc_HashtableElement(key, val); -} - -/*** META ((export #t)) */ -function sc_hashtableGet(ht, key) { - var hash = sc_hash(key); - if (hash in ht) - return ht[hash].val; - else - return false; -} - -/*** META ((export #t)) */ -function sc_hashtableForEach(ht, f) { - for (var v in ht) { - if (ht[v] instanceof sc_HashtableElement) - f(ht[v].key, ht[v].val); - } -} - -/*** META ((export hashtable-contains?) - (peephole (hole 2 "sc_hash(" 1 ") in " 0))) -*/ -function sc_hashtableContains(ht, key) { - var hash = sc_hash(key); - if (hash in ht) - return true; - else - return false; -} - -var SC_HASH_COUNTER = 0; - -function sc_hash(o) { - if (o === null) - return "null"; - else if (o === undefined) - return "undefined"; - else if (o === true) - return "true"; - else if (o === false) - return "false"; - else if (typeof o === "number") - return "num-" + o; - else if (typeof o === "string") - return "jsstr-" + o; - else if (o.sc_getHash) - return o.sc_getHash(); - else - return sc_counterHash.call(o); -} -function sc_counterHash() { - if (!this.sc_hash) { - this.sc_hash = "hash-" + SC_HASH_COUNTER; - SC_HASH_COUNTER++; - } - return this.sc_hash; -} - -function sc_Trampoline(args, maxTailCalls) { - this['__trampoline return__'] = true; - this.args = args; - this.MAX_TAIL_CALLs = maxTailCalls; -} -// TODO: call/cc stuff -sc_Trampoline.prototype.restart = function() { - var o = this; - while (true) { - // set both globals. - SC_TAIL_OBJECT.calls = o.MAX_TAIL_CALLs-1; - var fun = o.args.callee; - var res = fun.apply(SC_TAIL_OBJECT, o.args); - if (res instanceof sc_Trampoline) - o = res; - else - return res; - } -} - -/*** META ((export bind-exit-lambda)) */ -function sc_bindExitLambda(proc) { - var escape_obj = new sc_BindExitException(); - var escape = function(res) { - escape_obj.res = res; - throw escape_obj; - }; - try { - return proc(escape); - } catch(e) { - if (e === escape_obj) { - return e.res; - } - throw e; - } -} -function sc_BindExitException() { - this._internalException = true; -} - -var SC_SCM2JS_GLOBALS = new Object(); - -// default tail-call depth. -// normally the program should set it again. but just in case... -var SC_TAIL_OBJECT = new Object(); -SC_SCM2JS_GLOBALS.TAIL_OBJECT = SC_TAIL_OBJECT; -// ======================== I/O ======================= - -/*------------------------------------------------------------------*/ - -function sc_EOF() { -} -var SC_EOF_OBJECT = new sc_EOF(); - -function sc_Port() { -} - -/* --------------- Input ports -------------------------------------*/ - -function sc_InputPort() { -} -sc_InputPort.prototype = new sc_Port(); - -sc_InputPort.prototype.peekChar = function() { - if (!("peeked" in this)) - this.peeked = this.getNextChar(); - return this.peeked; -} -sc_InputPort.prototype.readChar = function() { - var tmp = this.peekChar(); - delete this.peeked; - return tmp; -} -sc_InputPort.prototype.isCharReady = function() { - return true; -} -sc_InputPort.prototype.close = function() { - // do nothing -} - -/* .............. String port ..........................*/ -function sc_ErrorInputPort() { -}; -sc_ErrorInputPort.prototype = new sc_InputPort(); -sc_ErrorInputPort.prototype.getNextChar = function() { - throw "can't read from error-port."; -}; -sc_ErrorInputPort.prototype.isCharReady = function() { - return false; -}; - - -/* .............. String port ..........................*/ - -function sc_StringInputPort(jsStr) { - // we are going to do some charAts on the str. - // instead of recreating all the time a String-object, we - // create one in the beginning. (not sure, if this is really an optim) - this.str = new String(jsStr); - this.pos = 0; -} -sc_StringInputPort.prototype = new sc_InputPort(); -sc_StringInputPort.prototype.getNextChar = function() { - if (this.pos >= this.str.length) - return SC_EOF_OBJECT; - return this.str.charAt(this.pos++); -}; - -/* ------------- Read and other lib-funs -------------------------------*/ -function sc_Token(type, val, pos) { - this.type = type; - this.val = val; - this.pos = pos; -} -sc_Token.EOF = 0/*EOF*/; -sc_Token.OPEN_PAR = 1/*OPEN_PAR*/; -sc_Token.CLOSE_PAR = 2/*CLOSE_PAR*/; -sc_Token.OPEN_BRACE = 3/*OPEN_BRACE*/; -sc_Token.CLOSE_BRACE = 4/*CLOSE_BRACE*/; -sc_Token.OPEN_BRACKET = 5/*OPEN_BRACKET*/; -sc_Token.CLOSE_BRACKET = 6/*CLOSE_BRACKET*/; -sc_Token.WHITESPACE = 7/*WHITESPACE*/; -sc_Token.QUOTE = 8/*QUOTE*/; -sc_Token.ID = 9/*ID*/; -sc_Token.DOT = 10/*DOT*/; -sc_Token.STRING = 11/*STRING*/; -sc_Token.NUMBER = 12/*NUMBER*/; -sc_Token.ERROR = 13/*ERROR*/; -sc_Token.VECTOR_BEGIN = 14/*VECTOR_BEGIN*/; -sc_Token.TRUE = 15/*TRUE*/; -sc_Token.FALSE = 16/*FALSE*/; -sc_Token.UNSPECIFIED = 17/*UNSPECIFIED*/; -sc_Token.REFERENCE = 18/*REFERENCE*/; -sc_Token.STORE = 19/*STORE*/; -sc_Token.CHAR = 20/*CHAR*/; - -var SC_ID_CLASS = SC_LOWER_CLASS + SC_UPPER_CLASS + "!$%*+-./:<=>?@^_~"; -function sc_Tokenizer(port) { - this.port = port; -} -sc_Tokenizer.prototype.peekToken = function() { - if (this.peeked) - return this.peeked; - var newToken = this.nextToken(); - this.peeked = newToken; - return newToken; -}; -sc_Tokenizer.prototype.readToken = function() { - var tmp = this.peekToken(); - delete this.peeked; - return tmp; -}; -sc_Tokenizer.prototype.nextToken = function() { - var port = this.port; - - function isNumberChar(c) { - return (c >= "0" && c <= "9"); - }; - function isIdOrNumberChar(c) { - return SC_ID_CLASS.indexOf(c) != -1 || // ID-char - (c >= "0" && c <= "9"); - } - function isWhitespace(c) { - return c === " " || c === "\r" || c === "\n" || c === "\t" || c === "\f"; - }; - function isWhitespaceOrEOF(c) { - return isWhitespace(c) || c === SC_EOF_OBJECT; - }; - - function readString() { - res = ""; - while (true) { - var c = port.readChar(); - switch (c) { - case '"': - return new sc_Token(11/*STRING*/, res); - case "\\": - var tmp = port.readChar(); - switch (tmp) { - case '0': res += "\0"; break; - case 'a': res += "\a"; break; - case 'b': res += "\b"; break; - case 'f': res += "\f"; break; - case 'n': res += "\n"; break; - case 'r': res += "\r"; break; - case 't': res += "\t"; break; - case 'v': res += "\v"; break; - case '"': res += '"'; break; - case '\\': res += '\\'; break; - case 'x': - /* hexa-number */ - var nb = 0; - while (true) { - var hexC = port.peekChar(); - if (hexC >= '0' && hexC <= '9') { - port.readChar(); - nb = nb * 16 + hexC.charCodeAt(0) - '0'.charCodeAt(0); - } else if (hexC >= 'a' && hexC <= 'f') { - port.readChar(); - nb = nb * 16 + hexC.charCodeAt(0) - 'a'.charCodeAt(0); - } else if (hexC >= 'A' && hexC <= 'F') { - port.readChar(); - nb = nb * 16 + hexC.charCodeAt(0) - 'A'.charCodeAt(0); - } else { - // next char isn't part of hex. - res += String.fromCharCode(nb); - break; - } - } - break; - default: - if (tmp === SC_EOF_OBJECT) { - return new sc_Token(13/*ERROR*/, "unclosed string-literal" + res); - } - res += tmp; - } - break; - default: - if (c === SC_EOF_OBJECT) { - return new sc_Token(13/*ERROR*/, "unclosed string-literal" + res); - } - res += c; - } - } - }; - function readIdOrNumber(firstChar) { - var res = firstChar; - while (isIdOrNumberChar(port.peekChar())) - res += port.readChar(); - if (isNaN(res)) - return new sc_Token(9/*ID*/, res); - else - return new sc_Token(12/*NUMBER*/, res - 0); - }; - - function skipWhitespaceAndComments() { - var done = false; - while (!done) { - done = true; - while (isWhitespace(port.peekChar())) - port.readChar(); - if (port.peekChar() === ';') { - port.readChar(); - done = false; - while (true) { - curChar = port.readChar(); - if (curChar === SC_EOF_OBJECT || - curChar === '\n') - break; - } - } - } - }; - - function readDot() { - if (isWhitespace(port.peekChar())) - return new sc_Token(10/*DOT*/); - else - return readIdOrNumber("."); - }; - - function readSharp() { - var c = port.readChar(); - if (isWhitespace(c)) - return new sc_Token(13/*ERROR*/, "bad #-pattern0."); - - // reference - if (isNumberChar(c)) { - var nb = c - 0; - while (isNumberChar(port.peekChar())) - nb = nb*10 + (port.readChar() - 0); - switch (port.readChar()) { - case '#': - return new sc_Token(18/*REFERENCE*/, nb); - case '=': - return new sc_Token(19/*STORE*/, nb); - default: - return new sc_Token(13/*ERROR*/, "bad #-pattern1." + nb); - } - } - - if (c === "(") - return new sc_Token(14/*VECTOR_BEGIN*/); - - if (c === "\\") { // character - var tmp = "" - while (!isWhitespaceOrEOF(port.peekChar())) - tmp += port.readChar(); - switch (tmp.length) { - case 0: // it's escaping a whitespace char: - if (sc_isEOFObject(port.peekChar)) - return new sc_Token(13/*ERROR*/, "bad #-pattern2."); - else - return new sc_Token(20/*CHAR*/, port.readChar()); - case 1: - return new sc_Token(20/*CHAR*/, tmp); - default: - var entry = sc_Char.readable2char[tmp.toLowerCase()]; - if (entry) - return new sc_Token(20/*CHAR*/, entry); - else - return new sc_Token(13/*ERROR*/, "unknown character description: #\\" + tmp); - } - } - - // some constants (#t, #f, #unspecified) - var res; - var needing; - switch (c) { - case 't': res = new sc_Token(15/*TRUE*/, true); needing = ""; break; - case 'f': res = new sc_Token(16/*FALSE*/, false); needing = ""; break; - case 'u': res = new sc_Token(17/*UNSPECIFIED*/, undefined); needing = "nspecified"; break; - default: - return new sc_Token(13/*ERROR*/, "bad #-pattern3: " + c); - } - while(true) { - c = port.peekChar(); - if ((isWhitespaceOrEOF(c) || c === ')') && - needing == "") - return res; - else if (isWhitespace(c) || needing == "") - return new sc_Token(13/*ERROR*/, "bad #-pattern4 " + c + " " + needing); - else if (needing.charAt(0) == c) { - port.readChar(); // consume - needing = needing.slice(1); - } else - return new sc_Token(13/*ERROR*/, "bad #-pattern5"); - } - - }; - - skipWhitespaceAndComments(); - var curChar = port.readChar(); - if (curChar === SC_EOF_OBJECT) - return new sc_Token(0/*EOF*/, curChar); - switch (curChar) - { - case " ": - case "\n": - case "\t": - return readWhitespace(); - case "(": - return new sc_Token(1/*OPEN_PAR*/); - case ")": - return new sc_Token(2/*CLOSE_PAR*/); - case "{": - return new sc_Token(3/*OPEN_BRACE*/); - case "}": - return new sc_Token(4/*CLOSE_BRACE*/); - case "[": - return new sc_Token(5/*OPEN_BRACKET*/); - case "]": - return new sc_Token(6/*CLOSE_BRACKET*/); - case "'": - return new sc_Token(8/*QUOTE*/); - case "#": - return readSharp(); - case ".": - return readDot(); - case '"': - return readString(); - default: - if (isIdOrNumberChar(curChar)) - return readIdOrNumber(curChar); - throw "unexpected character: " + curChar; - } -}; - -function sc_Reader(tokenizer) { - this.tokenizer = tokenizer; - this.backref = new Array(); -} -sc_Reader.prototype.read = function() { - function readList(listBeginType) { - function matchesPeer(open, close) { - return open === 1/*OPEN_PAR*/ && close === 2/*CLOSE_PAR*/ - || open === 3/*OPEN_BRACE*/ && close === 4/*CLOSE_BRACE*/ - || open === 5/*OPEN_BRACKET*/ && close === 6/*CLOSE_BRACKET*/; - }; - var res = null; - - while (true) { - var token = tokenizer.peekToken(); - - switch (token.type) { - case 2/*CLOSE_PAR*/: - case 4/*CLOSE_BRACE*/: - case 6/*CLOSE_BRACKET*/: - if (matchesPeer(listBeginType, token.type)) { - tokenizer.readToken(); // consume token - return sc_reverseBang(res); - } else - throw "closing par doesn't match: " + listBeginType - + " " + listEndType; - - case 0/*EOF*/: - throw "unexpected end of file"; - - case 10/*DOT*/: - tokenizer.readToken(); // consume token - var cdr = this.read(); - var par = tokenizer.readToken(); - if (!matchesPeer(listBeginType, par.type)) - throw "closing par doesn't match: " + listBeginType - + " " + par.type; - else - return sc_reverseAppendBang(res, cdr); - - - default: - res = sc_cons(this.read(), res); - } - } - }; - function readQuote() { - return sc_cons("quote", sc_cons(this.read(), null)); - }; - function readVector() { - // opening-parenthesis is already consumed - var a = new Array(); - while (true) { - var token = tokenizer.peekToken(); - switch (token.type) { - case 2/*CLOSE_PAR*/: - tokenizer.readToken(); - return a; - - default: - a.push(this.read()); - } - } - }; - - function storeRefence(nb) { - var tmp = this.read(); - this.backref[nb] = tmp; - return tmp; - }; - - function readReference(nb) { - if (nb in this.backref) - return this.backref[nb]; - else - throw "bad reference: " + nb; - }; - - var tokenizer = this.tokenizer; - - var token = tokenizer.readToken(); - - // handle error - if (token.type === 13/*ERROR*/) - throw token.val; - - switch (token.type) { - case 1/*OPEN_PAR*/: - case 3/*OPEN_BRACE*/: - case 5/*OPEN_BRACKET*/: - return readList.call(this, token.type); - case 8/*QUOTE*/: - return readQuote.call(this); - case 11/*STRING*/: - return sc_jsstring2string(token.val); - case 20/*CHAR*/: - return new sc_Char(token.val); - case 14/*VECTOR_BEGIN*/: - return readVector.call(this); - case 18/*REFERENCE*/: - return readReference.call(this, token.val); - case 19/*STORE*/: - return storeRefence.call(this, token.val); - case 9/*ID*/: - return sc_jsstring2symbol(token.val); - case 0/*EOF*/: - case 12/*NUMBER*/: - case 15/*TRUE*/: - case 16/*FALSE*/: - case 17/*UNSPECIFIED*/: - return token.val; - default: - throw "unexpected token " + token.type + " " + token.val; - } -}; - -/*** META ((export #t)) */ -function sc_read(port) { - if (port === undefined) // we assume the port hasn't been given. - port = SC_DEFAULT_IN; // THREAD: shared var... - var reader = new sc_Reader(new sc_Tokenizer(port)); - return reader.read(); -} -/*** META ((export #t)) */ -function sc_readChar(port) { - if (port === undefined) // we assume the port hasn't been given. - port = SC_DEFAULT_IN; // THREAD: shared var... - var t = port.readChar(); - return t === SC_EOF_OBJECT? t: new sc_Char(t); -} -/*** META ((export #t)) */ -function sc_peekChar(port) { - if (port === undefined) // we assume the port hasn't been given. - port = SC_DEFAULT_IN; // THREAD: shared var... - var t = port.peekChar(); - return t === SC_EOF_OBJECT? t: new sc_Char(t); -} -/*** META ((export #t) - (type bool)) -*/ -function sc_isCharReady(port) { - if (port === undefined) // we assume the port hasn't been given. - port = SC_DEFAULT_IN; // THREAD: shared var... - return port.isCharReady(); -} -/*** META ((export #t) - (peephole (postfix ".close()"))) -*/ -function sc_closeInputPort(p) { - return p.close(); -} - -/*** META ((export #t) - (type bool) - (peephole (postfix " instanceof sc_InputPort"))) -*/ -function sc_isInputPort(o) { - return (o instanceof sc_InputPort); -} - -/*** META ((export eof-object?) - (type bool) - (peephole (postfix " === SC_EOF_OBJECT"))) -*/ -function sc_isEOFObject(o) { - return o === SC_EOF_OBJECT; -} - -/*** META ((export #t) - (peephole (hole 0 "SC_DEFAULT_IN"))) -*/ -function sc_currentInputPort() { - return SC_DEFAULT_IN; -} - -/* ------------ file operations are not supported -----------*/ -/*** META ((export #t)) */ -function sc_callWithInputFile(s, proc) { - throw "can't open " + s; -} - -/*** META ((export #t)) */ -function sc_callWithOutputFile(s, proc) { - throw "can't open " + s; -} - -/*** META ((export #t)) */ -function sc_withInputFromFile(s, thunk) { - throw "can't open " + s; -} - -/*** META ((export #t)) */ -function sc_withOutputToFile(s, thunk) { - throw "can't open " + s; -} - -/*** META ((export #t)) */ -function sc_openInputFile(s) { - throw "can't open " + s; -} - -/*** META ((export #t)) */ -function sc_openOutputFile(s) { - throw "can't open " + s; -} - -/* ----------------------------------------------------------------------------*/ -/*** META ((export #t)) */ -function sc_basename(p) { - var i = p.lastIndexOf('/'); - - if(i >= 0) - return p.substring(i + 1, p.length); - else - return ''; -} - -/*** META ((export #t)) */ -function sc_dirname(p) { - var i = p.lastIndexOf('/'); - - if(i >= 0) - return p.substring(0, i); - else - return ''; -} - -/* ----------------------------------------------------------------------------*/ - -/*** META ((export #t)) */ -function sc_withInputFromPort(p, thunk) { - try { - var tmp = SC_DEFAULT_IN; // THREAD: shared var. - SC_DEFAULT_IN = p; - return thunk(); - } finally { - SC_DEFAULT_IN = tmp; - } -} - -/*** META ((export #t)) */ -function sc_withInputFromString(s, thunk) { - return sc_withInputFromPort(new sc_StringInputPort(sc_string2jsstring(s)), thunk); -} - -/*** META ((export #t)) */ -function sc_withOutputToPort(p, thunk) { - try { - var tmp = SC_DEFAULT_OUT; // THREAD: shared var. - SC_DEFAULT_OUT = p; - return thunk(); - } finally { - SC_DEFAULT_OUT = tmp; - } -} - -/*** META ((export #t)) */ -function sc_withOutputToString(thunk) { - var p = new sc_StringOutputPort(); - sc_withOutputToPort(p, thunk); - return p.close(); -} - -/*** META ((export #t)) */ -function sc_withOutputToProcedure(proc, thunk) { - var t = function(s) { proc(sc_jsstring2string(s)); }; - return sc_withOutputToPort(new sc_GenericOutputPort(t), thunk); -} - -/*** META ((export #t) - (peephole (hole 0 "new sc_StringOutputPort()"))) -*/ -function sc_openOutputString() { - return new sc_StringOutputPort(); -} - -/*** META ((export #t)) */ -function sc_openInputString(str) { - return new sc_StringInputPort(sc_string2jsstring(str)); -} - -/* ----------------------------------------------------------------------------*/ - -function sc_OutputPort() { -} -sc_OutputPort.prototype = new sc_Port(); -sc_OutputPort.prototype.appendJSString = function(obj) { - /* do nothing */ -} -sc_OutputPort.prototype.close = function() { - /* do nothing */ -} - -function sc_StringOutputPort() { - this.res = ""; -} -sc_StringOutputPort.prototype = new sc_OutputPort(); -sc_StringOutputPort.prototype.appendJSString = function(s) { - this.res += s; -} -sc_StringOutputPort.prototype.close = function() { - return sc_jsstring2string(this.res); -} - -/*** META ((export #t)) */ -function sc_getOutputString(sp) { - return sc_jsstring2string(sp.res); -} - - -function sc_ErrorOutputPort() { -} -sc_ErrorOutputPort.prototype = new sc_OutputPort(); -sc_ErrorOutputPort.prototype.appendJSString = function(s) { - throw "don't write on ErrorPort!"; -} -sc_ErrorOutputPort.prototype.close = function() { - /* do nothing */ -} - -function sc_GenericOutputPort(appendJSString, close) { - this.appendJSString = appendJSString; - if (close) - this.close = close; -} -sc_GenericOutputPort.prototype = new sc_OutputPort(); - -/*** META ((export #t) - (type bool) - (peephole (postfix " instanceof sc_OutputPort"))) -*/ -function sc_isOutputPort(o) { - return (o instanceof sc_OutputPort); -} - -/*** META ((export #t) - (peephole (postfix ".close()"))) -*/ -function sc_closeOutputPort(p) { - return p.close(); -} - -/* ------------------ write ---------------------------------------------------*/ - -/*** META ((export #t)) */ -function sc_write(o, p) { - if (p === undefined) // we assume not given - p = SC_DEFAULT_OUT; - p.appendJSString(sc_toWriteString(o)); -} - -function sc_toWriteString(o) { - if (o === null) - return "()"; - else if (o === true) - return "#t"; - else if (o === false) - return "#f"; - else if (o === undefined) - return "#unspecified"; - else if (typeof o === 'function') - return "#"; - else if (o.sc_toWriteString) - return o.sc_toWriteString(); - else - return o.toString(); -} - -function sc_escapeWriteString(s) { - var res = ""; - var j = 0; - for (i = 0; i < s.length; i++) { - switch (s.charAt(i)) { - case "\0": res += s.substring(j, i) + "\\0"; j = i + 1; break; - case "\b": res += s.substring(j, i) + "\\b"; j = i + 1; break; - case "\f": res += s.substring(j, i) + "\\f"; j = i + 1; break; - case "\n": res += s.substring(j, i) + "\\n"; j = i + 1; break; - case "\r": res += s.substring(j, i) + "\\r"; j = i + 1; break; - case "\t": res += s.substring(j, i) + "\\t"; j = i + 1; break; - case "\v": res += s.substring(j, i) + "\\v"; j = i + 1; break; - case '"': res += s.substring(j, i) + '\\"'; j = i + 1; break; - case "\\": res += s.substring(j, i) + "\\\\"; j = i + 1; break; - default: - var c = s.charAt(i); - if ("\a" !== "a" && c == "\a") { - res += s.substring(j, i) + "\\a"; j = i + 1; continue; - } - if ("\v" !== "v" && c == "\v") { - res += s.substring(j, i) + "\\v"; j = i + 1; continue; - } - //if (s.charAt(i) < ' ' || s.charCodeAt(i) > 127) { - // CARE: Manuel is this OK with HOP? - if (s.charAt(i) < ' ') { - /* non printable character and special chars */ - res += s.substring(j, i) + "\\x" + s.charCodeAt(i).toString(16); - j = i + 1; - } - // else just let i increase... - } - } - res += s.substring(j, i); - return res; -} - -/* ------------------ display ---------------------------------------------------*/ - -/*** META ((export #t)) */ -function sc_display(o, p) { - if (p === undefined) // we assume not given - p = SC_DEFAULT_OUT; - p.appendJSString(sc_toDisplayString(o)); -} - -function sc_toDisplayString(o) { - if (o === null) - return "()"; - else if (o === true) - return "#t"; - else if (o === false) - return "#f"; - else if (o === undefined) - return "#unspecified"; - else if (typeof o === 'function') - return "#"; - else if (o.sc_toDisplayString) - return o.sc_toDisplayString(); - else - return o.toString(); -} - -/* ------------------ newline ---------------------------------------------------*/ - -/*** META ((export #t)) */ -function sc_newline(p) { - if (p === undefined) // we assume not given - p = SC_DEFAULT_OUT; - p.appendJSString("\n"); -} - -/* ------------------ write-char ---------------------------------------------------*/ - -/*** META ((export #t)) */ -function sc_writeChar(c, p) { - if (p === undefined) // we assume not given - p = SC_DEFAULT_OUT; - p.appendJSString(c.val); -} - -/* ------------------ write-circle ---------------------------------------------------*/ - -/*** META ((export #t)) */ -function sc_writeCircle(o, p) { - if (p === undefined) // we assume not given - p = SC_DEFAULT_OUT; - p.appendJSString(sc_toWriteCircleString(o)); -} - -function sc_toWriteCircleString(o) { - var symb = sc_gensym("writeCircle"); - var nbPointer = new Object(); - nbPointer.nb = 0; - sc_prepWriteCircle(o, symb, nbPointer); - return sc_genToWriteCircleString(o, symb); -} - -function sc_prepWriteCircle(o, symb, nbPointer) { - // TODO sc_Struct - if (o instanceof sc_Pair || - o instanceof sc_Vector) { - if (o[symb] !== undefined) { - // not the first visit. - o[symb]++; - // unless there is already a number, assign one. - if (!o[symb + "nb"]) o[symb + "nb"] = nbPointer.nb++; - return; - } - o[symb] = 0; - if (o instanceof sc_Pair) { - sc_prepWriteCircle(o.car, symb, nbPointer); - sc_prepWriteCircle(o.cdr, symb, nbPointer); - } else { - for (var i = 0; i < o.length; i++) - sc_prepWriteCircle(o[i], symb, nbPointer); - } - } -} - -function sc_genToWriteCircleString(o, symb) { - if (!(o instanceof sc_Pair || - o instanceof sc_Vector)) - return sc_toWriteString(o); - return o.sc_toWriteCircleString(symb); -} -sc_Pair.prototype.sc_toWriteCircleString = function(symb, inList) { - if (this[symb + "use"]) { // use-flag is set. Just use it. - var nb = this[symb + "nb"]; - if (this[symb]-- === 0) { // if we are the last use. remove all fields. - delete this[symb]; - delete this[symb + "nb"]; - delete this[symb + "use"]; - } - if (inList) - return '. #' + nb + '#'; - else - return '#' + nb + '#'; - } - if (this[symb]-- === 0) { // if we are the last use. remove all fields. - delete this[symb]; - delete this[symb + "nb"]; - delete this[symb + "use"]; - } - - var res = ""; - - if (this[symb] !== undefined) { // implies > 0 - this[symb + "use"] = true; - if (inList) - res += '. #' + this[symb + "nb"] + '='; - else - res += '#' + this[symb + "nb"] + '='; - inList = false; - } - - if (!inList) - res += "("; - - // print car - res += sc_genToWriteCircleString(this.car, symb); - - if (sc_isPair(this.cdr)) { - res += " " + this.cdr.sc_toWriteCircleString(symb, true); - } else if (this.cdr !== null) { - res += " . " + sc_genToWriteCircleString(this.cdr, symb); - } - if (!inList) - res += ")"; - return res; -}; -sc_Vector.prototype.sc_toWriteCircleString = function(symb) { - if (this[symb + "use"]) { // use-flag is set. Just use it. - var nb = this[symb + "nb"]; - if (this[symb]-- === 0) { // if we are the last use. remove all fields. - delete this[symb]; - delete this[symb + "nb"]; - delete this[symb + "use"]; - } - return '#' + nb + '#'; - } - if (this[symb]-- === 0) { // if we are the last use. remove all fields. - delete this[symb]; - delete this[symb + "nb"]; - delete this[symb + "use"]; - } - - var res = ""; - if (this[symb] !== undefined) { // implies > 0 - this[symb + "use"] = true; - res += '#' + this[symb + "nb"] + '='; - } - res += "#("; - for (var i = 0; i < this.length; i++) { - res += sc_genToWriteCircleString(this[i], symb); - if (i < this.length - 1) res += " "; - } - res += ")"; - return res; -}; - - -/* ------------------ print ---------------------------------------------------*/ - -/*** META ((export #t)) */ -function sc_print(s) { - if (arguments.length === 1) { - sc_display(s); - sc_newline(); - } - else { - for (var i = 0; i < arguments.length; i++) - sc_display(arguments[i]); - sc_newline(); - } -} - -/* ------------------ format ---------------------------------------------------*/ -/*** META ((export #t)) */ -function sc_format(s, args) { - var len = s.length; - var p = new sc_StringOutputPort(); - var i = 0, j = 1; - - while( i < len ) { - var i2 = s.indexOf("~", i); - - if (i2 == -1) { - p.appendJSString( s.substring( i, len ) ); - return p.close(); - } else { - if (i2 > i) { - if (i2 == (len - 1)) { - p.appendJSString(s.substring(i, len)); - return p.close(); - } else { - p.appendJSString(s.substring(i, i2)); - i = i2; - } - } - - switch(s.charCodeAt(i2 + 1)) { - case 65: - case 97: - // a - sc_display(arguments[j], p); - i += 2; j++; - break; - - case 83: - case 115: - // s - sc_write(arguments[j], p); - i += 2; j++; - break; - - case 86: - case 118: - // v - sc_display(arguments[j], p); - p.appendJSString("\n"); - i += 2; j++; - break; - - case 67: - case 99: - // c - p.appendJSString(String.fromCharCode(arguments[j])); - i += 2; j++; - break; - - case 88: - case 120: - // x - p.appendJSString(arguments[j].toString(6)); - i += 2; j++; - break; - - case 79: - case 111: - // o - p.appendJSString(arguments[j].toString(8)); - i += 2; j++; - break; - - case 66: - case 98: - // b - p.appendJSString(arguments[j].toString(2)); - i += 2; j++; - break; - - case 37: - case 110: - // %, n - p.appendJSString("\n"); - i += 2; break; - - case 114: - // r - p.appendJSString("\r"); - i += 2; break; - - case 126: - // ~ - p.appendJSString("~"); - i += 2; break; - - default: - sc_error( "format: illegal ~" - + String.fromCharCode(s.charCodeAt(i2 + 1)) - + " sequence" ); - return ""; - } - } - } - - return p.close(); -} - -/* ------------------ global ports ---------------------------------------------------*/ - -var SC_DEFAULT_IN = new sc_ErrorInputPort(); -var SC_DEFAULT_OUT = new sc_ErrorOutputPort(); -var SC_ERROR_OUT = new sc_ErrorOutputPort(); - -var sc_SYMBOL_PREFIX = "\u1E9C"; -var sc_KEYWORD_PREFIX = "\u1E9D"; - -/*** META ((export #t) - (peephole (id))) */ -function sc_jsstring2string(s) { - return s; -} - -/*** META ((export #t) - (peephole (prefix "'\\u1E9C' +"))) -*/ -function sc_jsstring2symbol(s) { - return sc_SYMBOL_PREFIX + s; -} - -/*** META ((export #t) - (peephole (id))) -*/ -function sc_string2jsstring(s) { - return s; -} - -/*** META ((export #t) - (peephole (symbol2jsstring_immutable))) -*/ -function sc_symbol2jsstring(s) { - return s.slice(1); -} - -/*** META ((export #t) - (peephole (postfix ".slice(1)"))) -*/ -function sc_keyword2jsstring(k) { - return k.slice(1); -} - -/*** META ((export #t) - (peephole (prefix "'\\u1E9D' +"))) -*/ -function sc_jsstring2keyword(s) { - return sc_KEYWORD_PREFIX + s; -} - -/*** META ((export #t) - (type bool)) -*/ -function sc_isKeyword(s) { - return (typeof s === "string") && - (s.charAt(0) === sc_KEYWORD_PREFIX); -} - - -/*** META ((export #t)) */ -var sc_gensym = function() { - var counter = 1000; - return function(sym) { - counter++; - if (!sym) sym = sc_SYMBOL_PREFIX; - return sym + "s" + counter + "~" + "^sC-GeNsYm "; - }; -}(); - - -/*** META ((export #t) - (type bool)) -*/ -function sc_isEqual(o1, o2) { - return ((o1 === o2) || - (sc_isPair(o1) && sc_isPair(o2) - && sc_isPairEqual(o1, o2, sc_isEqual)) || - (sc_isVector(o1) && sc_isVector(o2) - && sc_isVectorEqual(o1, o2, sc_isEqual))); -} - -/*** META ((export number->symbol integer->symbol)) */ -function sc_number2symbol(x, radix) { - return sc_SYMBOL_PREFIX + sc_number2jsstring(x, radix); -} - -/*** META ((export number->string integer->string)) */ -var sc_number2string = sc_number2jsstring; - -/*** META ((export #t)) */ -function sc_symbol2number(s, radix) { - return sc_jsstring2number(s.slice(1), radix); -} - -/*** META ((export #t)) */ -var sc_string2number = sc_jsstring2number; - -/*** META ((export #t) - (peephole (prefix "+" s))) - ;; peephole will only apply if no radix is given. -*/ -function sc_string2integer(s, radix) { - if (!radix) return +s; - return parseInt(s, radix); -} - -/*** META ((export #t) - (peephole (prefix "+"))) -*/ -function sc_string2real(s) { - return +s; -} - - -/*** META ((export #t) - (type bool)) -*/ -function sc_isSymbol(s) { - return (typeof s === "string") && - (s.charAt(0) === sc_SYMBOL_PREFIX); -} - -/*** META ((export #t) - (peephole (symbol2string_immutable))) -*/ -function sc_symbol2string(s) { - return s.slice(1); -} - -/*** META ((export #t) - (peephole (prefix "'\\u1E9C' +"))) -*/ -function sc_string2symbol(s) { - return sc_SYMBOL_PREFIX + s; -} - -/*** META ((export symbol-append) - (peephole (symbolAppend_immutable))) -*/ -function sc_symbolAppend() { - var res = sc_SYMBOL_PREFIX; - for (var i = 0; i < arguments.length; i++) - res += arguments[i].slice(1); - return res; -} - -/*** META ((export #t) - (peephole (postfix ".val"))) -*/ -function sc_char2string(c) { return c.val; } - -/*** META ((export #t) - (peephole (hole 1 "'\\u1E9C' + " c ".val"))) -*/ -function sc_char2symbol(c) { return sc_SYMBOL_PREFIX + c.val; } - -/*** META ((export #t) - (type bool)) -*/ -function sc_isString(s) { - return (typeof s === "string") && - (s.charAt(0) !== sc_SYMBOL_PREFIX); -} - -/*** META ((export #t)) */ -var sc_makeString = sc_makejsString; - - -/*** META ((export #t)) */ -function sc_string() { - for (var i = 0; i < arguments.length; i++) - arguments[i] = arguments[i].val; - return "".concat.apply("", arguments); -} - -/*** META ((export #t) - (peephole (postfix ".length"))) -*/ -function sc_stringLength(s) { return s.length; } - -/*** META ((export #t)) */ -function sc_stringRef(s, k) { - return new sc_Char(s.charAt(k)); -} - -/* there's no stringSet in the immutable version -function sc_stringSet(s, k, c) -*/ - - -/*** META ((export string=?) - (type bool) - (peephole (hole 2 str1 " === " str2))) -*/ -function sc_isStringEqual(s1, s2) { - return s1 === s2; -} -/*** META ((export string?) - (type bool) - (peephole (hole 2 str1 " > " str2))) -*/ -function sc_isStringGreater(s1, s2) { - return s1 > s2; -} -/*** META ((export string<=?) - (type bool) - (peephole (hole 2 str1 " <= " str2))) -*/ -function sc_isStringLessEqual(s1, s2) { - return s1 <= s2; -} -/*** META ((export string>=?) - (type bool) - (peephole (hole 2 str1 " >= " str2))) -*/ -function sc_isStringGreaterEqual(s1, s2) { - return s1 >= s2; -} -/*** META ((export string-ci=?) - (type bool) - (peephole (hole 2 str1 ".toLowerCase() === " str2 ".toLowerCase()"))) -*/ -function sc_isStringCIEqual(s1, s2) { - return s1.toLowerCase() === s2.toLowerCase(); -} -/*** META ((export string-ci?) - (type bool) - (peephole (hole 2 str1 ".toLowerCase() > " str2 ".toLowerCase()"))) -*/ -function sc_isStringCIGreater(s1, s2) { - return s1.toLowerCase() > s2.toLowerCase(); -} -/*** META ((export string-ci<=?) - (type bool) - (peephole (hole 2 str1 ".toLowerCase() <= " str2 ".toLowerCase()"))) -*/ -function sc_isStringCILessEqual(s1, s2) { - return s1.toLowerCase() <= s2.toLowerCase(); -} -/*** META ((export string-ci>=?) - (type bool) - (peephole (hole 2 str1 ".toLowerCase() >= " str2 ".toLowerCase()"))) -*/ -function sc_isStringCIGreaterEqual(s1, s2) { - return s1.toLowerCase() >= s2.toLowerCase(); -} - -/*** META ((export #t) - (peephole (hole 3 s ".substring(" start ", " end ")"))) -*/ -function sc_substring(s, start, end) { - return s.substring(start, end); -} - -/*** META ((export #t)) -*/ -function sc_isSubstring_at(s1, s2, i) { - return s2 == s1.substring(i, i+ s2.length); -} - -/*** META ((export #t) - (peephole (infix 0 #f "+" "''"))) -*/ -function sc_stringAppend() { - return "".concat.apply("", arguments); -} - -/*** META ((export #t)) */ -var sc_string2list = sc_jsstring2list; - -/*** META ((export #t)) */ -var sc_list2string = sc_list2jsstring; - -/*** META ((export #t) - (peephole (id))) -*/ -function sc_stringCopy(s) { - return s; -} - -/* there's no string-fill in the immutable version -function sc_stringFill(s, c) -*/ - -/*** META ((export #t) - (peephole (postfix ".slice(1)"))) -*/ -function sc_keyword2string(o) { - return o.slice(1); -} - -/*** META ((export #t) - (peephole (prefix "'\\u1E9D' +"))) -*/ -function sc_string2keyword(o) { - return sc_KEYWORD_PREFIX + o; -} - -String.prototype.sc_toDisplayString = function() { - if (this.charAt(0) === sc_SYMBOL_PREFIX) - // TODO: care for symbols with spaces (escape-chars symbols). - return this.slice(1); - else if (this.charAt(0) === sc_KEYWORD_PREFIX) - return ":" + this.slice(1); - else - return this.toString(); -}; - -String.prototype.sc_toWriteString = function() { - if (this.charAt(0) === sc_SYMBOL_PREFIX) - // TODO: care for symbols with spaces (escape-chars symbols). - return this.slice(1); - else if (this.charAt(0) === sc_KEYWORD_PREFIX) - return ":" + this.slice(1); - else - return '"' + sc_escapeWriteString(this) + '"'; -}; -/* Exported Variables */ -var BgL_testzd2boyerzd2; -var BgL_nboyerzd2benchmarkzd2; -var BgL_setupzd2boyerzd2; -/* End Exports */ - -var translate_term_nboyer; -var translate_args_nboyer; -var untranslate_term_nboyer; -var BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer; -var BgL_sc_za2symbolzd2recordszd2alistza2_2z00_nboyer; -var translate_alist_nboyer; -var apply_subst_nboyer; -var apply_subst_lst_nboyer; -var tautologyp_nboyer; -var if_constructor_nboyer; -var rewrite_count_nboyer; -var rewrite_nboyer; -var rewrite_args_nboyer; -var unify_subst_nboyer; -var one_way_unify1_nboyer; -var false_term_nboyer; -var true_term_nboyer; -var trans_of_implies1_nboyer; -var is_term_equal_nboyer; -var is_term_member_nboyer; -var const_nboyer; -var sc_const_3_nboyer; -var sc_const_4_nboyer; -{ - (sc_const_4_nboyer = (new sc_Pair("\u1E9Cimplies",(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cimplies",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cimplies",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cimplies",(new sc_Pair("\u1E9Cz",(new sc_Pair("\u1E9Cu",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cimplies",(new sc_Pair("\u1E9Cu",(new sc_Pair("\u1E9Cw",null)))))),null)))))),null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cimplies",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cw",null)))))),null))))))); - (sc_const_3_nboyer = sc_list((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ccompile",(new sc_Pair("\u1E9Cform",null)))),(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair((new sc_Pair("\u1E9Ccodegen",(new sc_Pair((new sc_Pair("\u1E9Coptimize",(new sc_Pair("\u1E9Cform",null)))),(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),null)))))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ceqp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cy",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cgreaterp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clesseqp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cgreatereqp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cboolean",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Ct",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cf",null)),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ciff",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cimplies",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cimplies",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ceven1",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Ct",null)),(new sc_Pair((new sc_Pair("\u1E9Codd",(new sc_Pair((new sc_Pair("\u1E9Csub1",(new sc_Pair("\u1E9Cx",null)))),null)))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ccountps-",(new sc_Pair("\u1E9Cl",(new sc_Pair("\u1E9Cpred",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ccountps-loop",(new sc_Pair("\u1E9Cl",(new sc_Pair("\u1E9Cpred",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cfact-",(new sc_Pair("\u1E9Ci",null)))),(new sc_Pair((new sc_Pair("\u1E9Cfact-loop",(new sc_Pair("\u1E9Ci",(new sc_Pair((1),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Creverse-",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Creverse-loop",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdivides",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cassume-true",(new sc_Pair("\u1E9Cvar",(new sc_Pair("\u1E9Calist",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair("\u1E9Cvar",(new sc_Pair((new sc_Pair("\u1E9Ct",null)),null)))))),(new sc_Pair("\u1E9Calist",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cassume-false",(new sc_Pair("\u1E9Cvar",(new sc_Pair("\u1E9Calist",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair("\u1E9Cvar",(new sc_Pair((new sc_Pair("\u1E9Cf",null)),null)))))),(new sc_Pair("\u1E9Calist",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ctautology-checker",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Ctautologyp",(new sc_Pair((new sc_Pair("\u1E9Cnormalize",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cfalsify",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cfalsify1",(new sc_Pair((new sc_Pair("\u1E9Cnormalize",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cprime",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))),null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cprime1",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Csub1",(new sc_Pair("\u1E9Cx",null)))),null)))))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair("\u1E9Cp",(new sc_Pair("\u1E9Cq",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cp",(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cq",(new sc_Pair((new sc_Pair("\u1E9Ct",null)),(new sc_Pair((new sc_Pair("\u1E9Cf",null)),null)))))))),(new sc_Pair((new sc_Pair("\u1E9Cf",null)),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair("\u1E9Cp",(new sc_Pair("\u1E9Cq",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cp",(new sc_Pair((new sc_Pair("\u1E9Ct",null)),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cq",(new sc_Pair((new sc_Pair("\u1E9Ct",null)),(new sc_Pair((new sc_Pair("\u1E9Cf",null)),null)))))))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair("\u1E9Cp",null)))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cp",(new sc_Pair((new sc_Pair("\u1E9Cf",null)),(new sc_Pair((new sc_Pair("\u1E9Ct",null)),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cimplies",(new sc_Pair("\u1E9Cp",(new sc_Pair("\u1E9Cq",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cp",(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cq",(new sc_Pair((new sc_Pair("\u1E9Ct",null)),(new sc_Pair((new sc_Pair("\u1E9Cf",null)),null)))))))),(new sc_Pair((new sc_Pair("\u1E9Ct",null)),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",(new sc_Pair("\u1E9Cc",null)))))))),(new sc_Pair("\u1E9Cd",(new sc_Pair("\u1E9Ce",null)))))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Ca",(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cb",(new sc_Pair("\u1E9Cd",(new sc_Pair("\u1E9Ce",null)))))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair("\u1E9Cc",(new sc_Pair("\u1E9Cd",(new sc_Pair("\u1E9Ce",null)))))))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cx",null)))),null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Ca",null)))),(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cb",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cc",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cb",null)))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cc",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cy",null)))),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair((new sc_Pair("\u1E9Cplus-tree",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair((new sc_Pair("\u1E9Cplus-tree",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair((new sc_Pair("\u1E9Cplus-tree",(new sc_Pair("\u1E9Cy",null)))),(new sc_Pair("\u1E9Ca",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair((new sc_Pair("\u1E9Cplus-tree",(new sc_Pair((new sc_Pair("\u1E9Cplus-fringe",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Ca",null)))))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair("\u1E9Cb",null)))),(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair("\u1E9Ca",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cz",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cy",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cexec",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair("\u1E9Cpds",(new sc_Pair("\u1E9Cenvrn",null)))))))),(new sc_Pair((new sc_Pair("\u1E9Cexec",(new sc_Pair("\u1E9Cy",(new sc_Pair((new sc_Pair("\u1E9Cexec",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cpds",(new sc_Pair("\u1E9Cenvrn",null)))))))),(new sc_Pair("\u1E9Cenvrn",null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cmc-flatten",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair((new sc_Pair("\u1E9Cflatten",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair("\u1E9Cy",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cb",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair("\u1E9Cy",null)))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clength",(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Clength",(new sc_Pair("\u1E9Cx",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Ca",(new sc_Pair((new sc_Pair("\u1E9Cintersect",(new sc_Pair("\u1E9Cb",(new sc_Pair("\u1E9Cc",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cc",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cnth",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),(new sc_Pair("\u1E9Ci",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cexp",(new sc_Pair("\u1E9Ci",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cj",(new sc_Pair("\u1E9Ck",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair((new sc_Pair("\u1E9Cexp",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cj",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cexp",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Ck",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cexp",(new sc_Pair("\u1E9Ci",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cj",(new sc_Pair("\u1E9Ck",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cexp",(new sc_Pair((new sc_Pair("\u1E9Cexp",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cj",null)))))),(new sc_Pair("\u1E9Ck",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Creverse-loop",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair("\u1E9Cy",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Creverse-loop",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair("\u1E9Cx",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ccount-list",(new sc_Pair("\u1E9Cz",(new sc_Pair((new sc_Pair("\u1E9Csort-lp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((new sc_Pair("\u1E9Ccount-list",(new sc_Pair("\u1E9Cz",(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ccount-list",(new sc_Pair("\u1E9Cz",(new sc_Pair("\u1E9Cy",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cc",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cb",(new sc_Pair("\u1E9Cc",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cy",(new sc_Pair((new sc_Pair("\u1E9Cquotient",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cx",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cpower-eval",(new sc_Pair((new sc_Pair("\u1E9Cbig-plus1",(new sc_Pair("\u1E9Cl",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cbase",null)))))))),(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((new sc_Pair("\u1E9Cpower-eval",(new sc_Pair("\u1E9Cl",(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair("\u1E9Ci",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cpower-eval",(new sc_Pair((new sc_Pair("\u1E9Cbig-plus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cbase",null)))))))))),(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Ci",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((new sc_Pair("\u1E9Cpower-eval",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cpower-eval",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cbase",null)))))),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair("\u1E9Cy",(new sc_Pair((1),null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cy",null)))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair((new sc_Pair("\u1E9Cquotient",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cj",null)))))),(new sc_Pair("\u1E9Ci",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Ci",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cj",null)))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cj",(new sc_Pair((1),null)))))),null)))),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cy",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cpower-eval",(new sc_Pair((new sc_Pair("\u1E9Cpower-rep",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Ci",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cpower-eval",(new sc_Pair((new sc_Pair("\u1E9Cbig-plus",(new sc_Pair((new sc_Pair("\u1E9Cpower-rep",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cpower-rep",(new sc_Pair("\u1E9Cj",(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),(new sc_Pair("\u1E9Cbase",null)))))))))),(new sc_Pair("\u1E9Cbase",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cj",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cgcd",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cgcd",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cnth",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair("\u1E9Ci",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair((new sc_Pair("\u1E9Cnth",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Ci",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnth",(new sc_Pair("\u1E9Cb",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Ci",(new sc_Pair((new sc_Pair("\u1E9Clength",(new sc_Pair("\u1E9Ca",null)))),null)))))),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cy",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cy",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cz",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Cc",(new sc_Pair("\u1E9Cw",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cc",(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cw",(new sc_Pair("\u1E9Cx",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cb",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cc",null)))))),null)))))),(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cb",(new sc_Pair("\u1E9Cc",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))),(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair("\u1E9Cy",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cz",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cz",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cy",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cx",null)))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cgcd",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cz",(new sc_Pair((new sc_Pair("\u1E9Cgcd",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cvalue",(new sc_Pair((new sc_Pair("\u1E9Cnormalize",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cvalue",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Ca",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cflatten",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair("\u1E9Cy",(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cnlistp",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clistp",(new sc_Pair((new sc_Pair("\u1E9Cgopher",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Clistp",(new sc_Pair("\u1E9Cx",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Csamefringe",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cflatten",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cflatten",(new sc_Pair("\u1E9Cy",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cgreatest-factor",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cy",null)))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cy",(new sc_Pair((1),null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cgreatest-factor",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((1),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((1),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair((new sc_Pair("\u1E9Cgreatest-factor",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cy",null)))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cy",(new sc_Pair((1),null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cx",null)))),null)))),null)))))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ctimes-list",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair((new sc_Pair("\u1E9Ctimes-list",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Ctimes-list",(new sc_Pair("\u1E9Cy",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cprime-list",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cprime-list",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cprime-list",(new sc_Pair("\u1E9Cy",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cz",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cw",(new sc_Pair("\u1E9Cz",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cz",null)))),(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cz",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cw",(new sc_Pair((1),null)))))),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cgreatereqp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cor",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cand",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cy",(new sc_Pair((1),null)))))),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((1),null)))))),(new sc_Pair(sc_list("\u1E9Cand", (new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Ca",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),null)))), (new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair("\u1E9Cb",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),null)))), (new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Ca",null)))), (new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cb",null)))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Csub1",(new sc_Pair("\u1E9Ca",null)))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Csub1",(new sc_Pair("\u1E9Cb",null)))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair((new sc_Pair("\u1E9Clength",(new sc_Pair((new sc_Pair("\u1E9Cdelete",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cl",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Clength",(new sc_Pair("\u1E9Cl",null)))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cl",null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Csort2",(new sc_Pair((new sc_Pair("\u1E9Cdelete",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cl",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cdelete",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Csort2",(new sc_Pair("\u1E9Cl",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdsort",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Csort2",(new sc_Pair("\u1E9Cx",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clength",(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair("\u1E9Cx1",(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair("\u1E9Cx2",(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair("\u1E9Cx3",(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair("\u1E9Cx4",(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair("\u1E9Cx5",(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair("\u1E9Cx6",(new sc_Pair("\u1E9Cx7",null)))))),null)))))),null)))))),null)))))),null)))))),null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((6),(new sc_Pair((new sc_Pair("\u1E9Clength",(new sc_Pair("\u1E9Cx7",null)))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair((2),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cx",null)))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cquotient",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),(new sc_Pair((2),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cquotient",(new sc_Pair("\u1E9Cy",(new sc_Pair((2),null)))))),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Csigma",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),(new sc_Pair("\u1E9Ci",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cquotient",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Ci",(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair("\u1E9Ci",null)))),null)))))),(new sc_Pair((2),null)))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair("\u1E9Cy",null)))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cy",null)))),(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair("\u1E9Cx",null)))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Cz",(new sc_Pair("\u1E9Cy",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cz",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cz",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnot",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cz",null)))),null)))))),null)))))))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair((new sc_Pair("\u1E9Cplus-tree",(new sc_Pair((new sc_Pair("\u1E9Cdelete",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))),(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair((new sc_Pair("\u1E9Cplus-tree",(new sc_Pair("\u1E9Cy",null)))),(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Ca",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cmeaning",(new sc_Pair((new sc_Pair("\u1E9Cplus-tree",(new sc_Pair("\u1E9Cy",null)))),(new sc_Pair("\u1E9Ca",null)))))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cadd1",(new sc_Pair("\u1E9Cy",null)))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Cnumberp",(new sc_Pair("\u1E9Cy",null)))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cx",null)))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cnth",(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),(new sc_Pair("\u1E9Ci",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Ci",null)))),(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clast",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Clistp",(new sc_Pair("\u1E9Cb",null)))),(new sc_Pair((new sc_Pair("\u1E9Clast",(new sc_Pair("\u1E9Cb",null)))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Clistp",(new sc_Pair("\u1E9Ca",null)))),(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair((new sc_Pair("\u1E9Ccar",(new sc_Pair((new sc_Pair("\u1E9Clast",(new sc_Pair("\u1E9Ca",null)))),null)))),(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair("\u1E9Cb",null)))))))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Clessp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ct",null)),(new sc_Pair("\u1E9Cz",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cf",null)),(new sc_Pair("\u1E9Cz",null)))))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cassignment",(new sc_Pair("\u1E9Cx",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Cassignedp",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cassignment",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Ca",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cassignment",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cb",null)))))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Ccar",(new sc_Pair((new sc_Pair("\u1E9Cgopher",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Clistp",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Ccar",(new sc_Pair((new sc_Pair("\u1E9Cflatten",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cflatten",(new sc_Pair((new sc_Pair("\u1E9Ccdr",(new sc_Pair((new sc_Pair("\u1E9Cgopher",(new sc_Pair("\u1E9Cx",null)))),null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Clistp",(new sc_Pair("\u1E9Cx",null)))),(new sc_Pair((new sc_Pair("\u1E9Ccdr",(new sc_Pair((new sc_Pair("\u1E9Cflatten",(new sc_Pair("\u1E9Cx",null)))),null)))),(new sc_Pair((new sc_Pair("\u1E9Ccons",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),null)))))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cquotient",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cx",null)))))),(new sc_Pair("\u1E9Cy",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Czerop",(new sc_Pair("\u1E9Cy",null)))),(new sc_Pair((new sc_Pair("\u1E9Czero",null)),(new sc_Pair((new sc_Pair("\u1E9Cfix",(new sc_Pair("\u1E9Cx",null)))),null)))))))),null)))))), (new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cget",(new sc_Pair("\u1E9Cj",(new sc_Pair((new sc_Pair("\u1E9Cset",(new sc_Pair("\u1E9Ci",(new sc_Pair("\u1E9Cval",(new sc_Pair("\u1E9Cmem",null)))))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cif",(new sc_Pair((new sc_Pair("\u1E9Ceqp",(new sc_Pair("\u1E9Cj",(new sc_Pair("\u1E9Ci",null)))))),(new sc_Pair("\u1E9Cval",(new sc_Pair((new sc_Pair("\u1E9Cget",(new sc_Pair("\u1E9Cj",(new sc_Pair("\u1E9Cmem",null)))))),null)))))))),null)))))))); - (const_nboyer = (new sc_Pair((new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cf",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cc",(new sc_Pair((new sc_Pair("\u1E9Czero",null)),null)))))),null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cy",(new sc_Pair("\u1E9Cf",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair((new sc_Pair("\u1E9Ctimes",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Cc",(new sc_Pair("\u1E9Cd",null)))))),null)))))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cz",(new sc_Pair("\u1E9Cf",(new sc_Pair((new sc_Pair("\u1E9Creverse",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair((new sc_Pair("\u1E9Cappend",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cnil",null)),null)))))),null)))),null)))))),(new sc_Pair((new sc_Pair("\u1E9Cu",(new sc_Pair("\u1E9Cequal",(new sc_Pair((new sc_Pair("\u1E9Cplus",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cdifference",(new sc_Pair("\u1E9Cx",(new sc_Pair("\u1E9Cy",null)))))),null)))))))),(new sc_Pair((new sc_Pair("\u1E9Cw",(new sc_Pair("\u1E9Clessp",(new sc_Pair((new sc_Pair("\u1E9Cremainder",(new sc_Pair("\u1E9Ca",(new sc_Pair("\u1E9Cb",null)))))),(new sc_Pair((new sc_Pair("\u1E9Cmember",(new sc_Pair("\u1E9Ca",(new sc_Pair((new sc_Pair("\u1E9Clength",(new sc_Pair("\u1E9Cb",null)))),null)))))),null)))))))),null))))))))))); - BgL_nboyerzd2benchmarkzd2 = function() { - var args = null; - for (var sc_tmp = arguments.length - 1; sc_tmp >= 0; sc_tmp--) { - args = sc_cons(arguments[sc_tmp], args); - } - var n; - return ((n = ((args === null)?(0):(args.car))), (BgL_setupzd2boyerzd2()), (BgL_runzd2benchmarkzd2(("nboyer"+(sc_number2string(n))), (1), function() { - return (BgL_testzd2boyerzd2(n)); - }, function(rewrites) { - if ((sc_isNumber(rewrites))) - switch (n) { - case (0): - return (rewrites===(95024)); - break; - case (1): - return (rewrites===(591777)); - break; - case (2): - return (rewrites===(1813975)); - break; - case (3): - return (rewrites===(5375678)); - break; - case (4): - return (rewrites===(16445406)); - break; - case (5): - return (rewrites===(51507739)); - break; - default: - return true; - break; - } - else - return false; - }))); - }; - BgL_setupzd2boyerzd2 = function() { - return true; - }; - BgL_testzd2boyerzd2 = function() { - return true; - }; - translate_term_nboyer = function(term) { - var lst; - return (!(term instanceof sc_Pair)?term:(new sc_Pair((BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer((term.car))), ((lst = (term.cdr)), ((lst === null)?null:(new sc_Pair((translate_term_nboyer((lst.car))), (translate_args_nboyer((lst.cdr)))))))))); - }; - translate_args_nboyer = function(lst) { - var sc_lst_5; - var term; - return ((lst === null)?null:(new sc_Pair(((term = (lst.car)), (!(term instanceof sc_Pair)?term:(new sc_Pair((BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer((term.car))), (translate_args_nboyer((term.cdr))))))), ((sc_lst_5 = (lst.cdr)), ((sc_lst_5 === null)?null:(new sc_Pair((translate_term_nboyer((sc_lst_5.car))), (translate_args_nboyer((sc_lst_5.cdr)))))))))); - }; - untranslate_term_nboyer = function(term) { - var optrOpnd; - var tail1131; - var L1127; - var falseHead1130; - var symbol_record; - if (!(term instanceof sc_Pair)) - return term; - else - { - (falseHead1130 = (new sc_Pair(null, null))); - (L1127 = (term.cdr)); - (tail1131 = falseHead1130); - while (!(L1127 === null)) { - { - (tail1131.cdr = (new sc_Pair((untranslate_term_nboyer((L1127.car))), null))); - (tail1131 = (tail1131.cdr)); - (L1127 = (L1127.cdr)); - } - } - (optrOpnd = (falseHead1130.cdr)); - return (new sc_Pair(((symbol_record = (term.car)), (symbol_record[(0)])), optrOpnd)); - } - }; - BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer = function(sym) { - var r; - var x; - return ((x = (sc_assq(sym, BgL_sc_za2symbolzd2recordszd2alistza2_2z00_nboyer))), ((x!== false)?(x.cdr):((r = [sym, null]), (BgL_sc_za2symbolzd2recordszd2alistza2_2z00_nboyer = (new sc_Pair((new sc_Pair(sym, r)), BgL_sc_za2symbolzd2recordszd2alistza2_2z00_nboyer))), r))); - }; - (BgL_sc_za2symbolzd2recordszd2alistza2_2z00_nboyer = null); - translate_alist_nboyer = function(alist) { - var sc_alist_6; - var term; - return ((alist === null)?null:(new sc_Pair((new sc_Pair((alist.car.car), ((term = (alist.car.cdr)), (!(term instanceof sc_Pair)?term:(new sc_Pair((BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer((term.car))), (translate_args_nboyer((term.cdr))))))))), ((sc_alist_6 = (alist.cdr)), ((sc_alist_6 === null)?null:(new sc_Pair((new sc_Pair((sc_alist_6.car.car), (translate_term_nboyer((sc_alist_6.car.cdr))))), (translate_alist_nboyer((sc_alist_6.cdr)))))))))); - }; - apply_subst_nboyer = function(alist, term) { - var lst; - var temp_temp; - return (!(term instanceof sc_Pair)?((temp_temp = (sc_assq(term, alist))), ((temp_temp!== false)?(temp_temp.cdr):term)):(new sc_Pair((term.car), ((lst = (term.cdr)), ((lst === null)?null:(new sc_Pair((apply_subst_nboyer(alist, (lst.car))), (apply_subst_lst_nboyer(alist, (lst.cdr)))))))))); - }; - apply_subst_lst_nboyer = function(alist, lst) { - var sc_lst_7; - return ((lst === null)?null:(new sc_Pair((apply_subst_nboyer(alist, (lst.car))), ((sc_lst_7 = (lst.cdr)), ((sc_lst_7 === null)?null:(new sc_Pair((apply_subst_nboyer(alist, (sc_lst_7.car))), (apply_subst_lst_nboyer(alist, (sc_lst_7.cdr)))))))))); - }; - tautologyp_nboyer = function(sc_x_11, true_lst, false_lst) { - var tmp1125; - var x; - var tmp1126; - var sc_x_8; - var sc_tmp1125_9; - var sc_tmp1126_10; - var sc_x_11; - var true_lst; - var false_lst; - while (true) { - if ((((sc_tmp1126_10 = (is_term_equal_nboyer(sc_x_11, true_term_nboyer))), ((sc_tmp1126_10!== false)?sc_tmp1126_10:(is_term_member_nboyer(sc_x_11, true_lst))))!== false)) - return true; - else - if ((((sc_tmp1125_9 = (is_term_equal_nboyer(sc_x_11, false_term_nboyer))), ((sc_tmp1125_9!== false)?sc_tmp1125_9:(is_term_member_nboyer(sc_x_11, false_lst))))!== false)) - return false; - else - if (!(sc_x_11 instanceof sc_Pair)) - return false; - else - if (((sc_x_11.car)===if_constructor_nboyer)) - if ((((sc_x_8 = (sc_x_11.cdr.car)), (tmp1126 = (is_term_equal_nboyer(sc_x_8, true_term_nboyer))), ((tmp1126!== false)?tmp1126:(is_term_member_nboyer(sc_x_8, true_lst))))!== false)) - (sc_x_11 = (sc_x_11.cdr.cdr.car)); - else - if ((((x = (sc_x_11.cdr.car)), (tmp1125 = (is_term_equal_nboyer(x, false_term_nboyer))), ((tmp1125!== false)?tmp1125:(is_term_member_nboyer(x, false_lst))))!== false)) - (sc_x_11 = (sc_x_11.cdr.cdr.cdr.car)); - else - if (((tautologyp_nboyer((sc_x_11.cdr.cdr.car), (new sc_Pair((sc_x_11.cdr.car), true_lst)), false_lst))!== false)) - { - (false_lst = (new sc_Pair((sc_x_11.cdr.car), false_lst))); - (sc_x_11 = (sc_x_11.cdr.cdr.cdr.car)); - } - else - return false; - else - return false; - } - }; - (if_constructor_nboyer = "\u1E9C*"); - (rewrite_count_nboyer = (0)); - rewrite_nboyer = function(term) { - var term2; - var sc_term_12; - var lst; - var symbol_record; - var sc_lst_13; - { - (++rewrite_count_nboyer); - if (!(term instanceof sc_Pair)) - return term; - else - { - (sc_term_12 = (new sc_Pair((term.car), ((sc_lst_13 = (term.cdr)), ((sc_lst_13 === null)?null:(new sc_Pair((rewrite_nboyer((sc_lst_13.car))), (rewrite_args_nboyer((sc_lst_13.cdr)))))))))); - (lst = ((symbol_record = (term.car)), (symbol_record[(1)]))); - while (true) { - if ((lst === null)) - return sc_term_12; - else - if ((((term2 = ((lst.car).cdr.car)), (unify_subst_nboyer = null), (one_way_unify1_nboyer(sc_term_12, term2)))!== false)) - return (rewrite_nboyer((apply_subst_nboyer(unify_subst_nboyer, ((lst.car).cdr.cdr.car))))); - else - (lst = (lst.cdr)); - } - } - } - }; - rewrite_args_nboyer = function(lst) { - var sc_lst_14; - return ((lst === null)?null:(new sc_Pair((rewrite_nboyer((lst.car))), ((sc_lst_14 = (lst.cdr)), ((sc_lst_14 === null)?null:(new sc_Pair((rewrite_nboyer((sc_lst_14.car))), (rewrite_args_nboyer((sc_lst_14.cdr)))))))))); - }; - (unify_subst_nboyer = "\u1E9C*"); - one_way_unify1_nboyer = function(term1, term2) { - var lst1; - var lst2; - var temp_temp; - if (!(term2 instanceof sc_Pair)) - { - (temp_temp = (sc_assq(term2, unify_subst_nboyer))); - if ((temp_temp!== false)) - return (is_term_equal_nboyer(term1, (temp_temp.cdr))); - else - if ((sc_isNumber(term2))) - return (sc_isEqual(term1, term2)); - else - { - (unify_subst_nboyer = (new sc_Pair((new sc_Pair(term2, term1)), unify_subst_nboyer))); - return true; - } - } - else - if (!(term1 instanceof sc_Pair)) - return false; - else - if (((term1.car)===(term2.car))) - { - (lst1 = (term1.cdr)); - (lst2 = (term2.cdr)); - while (true) { - if ((lst1 === null)) - return (lst2 === null); - else - if ((lst2 === null)) - return false; - else - if (((one_way_unify1_nboyer((lst1.car), (lst2.car)))!== false)) - { - (lst1 = (lst1.cdr)); - (lst2 = (lst2.cdr)); - } - else - return false; - } - } - else - return false; - }; - (false_term_nboyer = "\u1E9C*"); - (true_term_nboyer = "\u1E9C*"); - trans_of_implies1_nboyer = function(n) { - var sc_n_15; - return ((sc_isEqual(n, (1)))?(sc_list("\u1E9Cimplies", (0), (1))):(sc_list("\u1E9Cand", (sc_list("\u1E9Cimplies", (n-(1)), n)), ((sc_n_15 = (n-(1))), ((sc_isEqual(sc_n_15, (1)))?(sc_list("\u1E9Cimplies", (0), (1))):(sc_list("\u1E9Cand", (sc_list("\u1E9Cimplies", (sc_n_15-(1)), sc_n_15)), (trans_of_implies1_nboyer((sc_n_15-(1))))))))))); - }; - is_term_equal_nboyer = function(x, y) { - var lst1; - var lst2; - var r2; - var r1; - if ((x instanceof sc_Pair)) - if ((y instanceof sc_Pair)) - if ((((r1 = (x.car)), (r2 = (y.car)), (r1===r2))!== false)) - { - (lst1 = (x.cdr)); - (lst2 = (y.cdr)); - while (true) { - if ((lst1 === null)) - return (lst2 === null); - else - if ((lst2 === null)) - return false; - else - if (((is_term_equal_nboyer((lst1.car), (lst2.car)))!== false)) - { - (lst1 = (lst1.cdr)); - (lst2 = (lst2.cdr)); - } - else - return false; - } - } - else - return false; - else - return false; - else - return (sc_isEqual(x, y)); - }; - is_term_member_nboyer = function(x, lst) { - var x; - var lst; - while (true) { - if ((lst === null)) - return false; - else - if (((is_term_equal_nboyer(x, (lst.car)))!== false)) - return true; - else - (lst = (lst.cdr)); - } - }; - BgL_setupzd2boyerzd2 = function() { - var symbol_record; - var value; - var BgL_sc_symbolzd2record_16zd2; - var sym; - var sc_sym_17; - var term; - var lst; - var sc_term_18; - var sc_term_19; - { - (BgL_sc_za2symbolzd2recordszd2alistza2_2z00_nboyer = null); - (if_constructor_nboyer = (BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer("\u1E9Cif"))); - (false_term_nboyer = ((sc_term_19 = (new sc_Pair("\u1E9Cf",null))), (!(sc_term_19 instanceof sc_Pair)?sc_term_19:(new sc_Pair((BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer((sc_term_19.car))), (translate_args_nboyer((sc_term_19.cdr)))))))); - (true_term_nboyer = ((sc_term_18 = (new sc_Pair("\u1E9Ct",null))), (!(sc_term_18 instanceof sc_Pair)?sc_term_18:(new sc_Pair((BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer((sc_term_18.car))), (translate_args_nboyer((sc_term_18.cdr)))))))); - (lst = sc_const_3_nboyer); - while (!(lst === null)) { - { - (term = (lst.car)); - if (((term instanceof sc_Pair)&&(((term.car)==="\u1E9Cequal")&&((term.cdr.car) instanceof sc_Pair)))) - { - (sc_sym_17 = ((term.cdr.car).car)); - (value = (new sc_Pair((!(term instanceof sc_Pair)?term:(new sc_Pair((BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer((term.car))), (translate_args_nboyer((term.cdr)))))), ((sym = ((term.cdr.car).car)), (BgL_sc_symbolzd2record_16zd2 = (BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer(sym))), (BgL_sc_symbolzd2record_16zd2[(1)]))))); - (symbol_record = (BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer(sc_sym_17))); - (symbol_record[(1)] = value); - } - else - (sc_error("ADD-LEMMA did not like term: ", term)); - (lst = (lst.cdr)); - } - } - return true; - } - }; - BgL_testzd2boyerzd2 = function(n) { - var optrOpnd; - var term; - var sc_n_20; - var answer; - var sc_term_21; - var sc_term_22; - { - (rewrite_count_nboyer = (0)); - (term = sc_const_4_nboyer); - (sc_n_20 = n); - while (!(sc_n_20=== 0)) { - { - (term = (sc_list("\u1E9Cor", term, (new sc_Pair("\u1E9Cf",null))))); - (--sc_n_20); - } - } - (sc_term_22 = term); - if (!(sc_term_22 instanceof sc_Pair)) - (optrOpnd = sc_term_22); - else - (optrOpnd = (new sc_Pair((BgL_sc_symbolzd2ze3symbolzd2record_1ze3_nboyer((sc_term_22.car))), (translate_args_nboyer((sc_term_22.cdr)))))); - (sc_term_21 = (apply_subst_nboyer(((const_nboyer === null)?null:(new sc_Pair((new sc_Pair((const_nboyer.car.car), (translate_term_nboyer((const_nboyer.car.cdr))))), (translate_alist_nboyer((const_nboyer.cdr)))))), optrOpnd))); - (answer = (tautologyp_nboyer((rewrite_nboyer(sc_term_21)), null, null))); - (sc_write(rewrite_count_nboyer)); - (sc_display(" rewrites")); - (sc_newline()); - if ((answer!== false)) - return rewrite_count_nboyer; - else - return false; - } - }; -} -/* Exported Variables */ -var BgL_parsezd2ze3nbzd2treesze3; -var BgL_earleyzd2benchmarkzd2; -var BgL_parsezd2ze3parsedzf3zc2; -var test; -var BgL_parsezd2ze3treesz31; -var BgL_makezd2parserzd2; -/* End Exports */ - -var const_earley; -{ - (const_earley = (new sc_Pair((new sc_Pair("\u1E9Cs",(new sc_Pair((new sc_Pair("\u1E9Ca",null)),(new sc_Pair((new sc_Pair("\u1E9Cs",(new sc_Pair("\u1E9Cs",null)))),null)))))),null))); - BgL_makezd2parserzd2 = function(grammar, lexer) { - var i; - var parser_descr; - var def_loop; - var nb_nts; - var names; - var steps; - var predictors; - var enders; - var starters; - var nts; - var sc_names_1; - var sc_steps_2; - var sc_predictors_3; - var sc_enders_4; - var sc_starters_5; - var nb_confs; - var BgL_sc_defzd2loop_6zd2; - var BgL_sc_nbzd2nts_7zd2; - var sc_nts_8; - var BgL_sc_defzd2loop_9zd2; - var ind; - { - ind = function(nt, sc_nts_10) { - var i; - { - (i = ((sc_nts_10.length)-(1))); - while (true) { - if ((i>=(0))) - if ((sc_isEqual((sc_nts_10[i]), nt))) - return i; - else - (--i); - else - return false; - } - } - }; - (sc_nts_8 = ((BgL_sc_defzd2loop_9zd2 = function(defs, sc_nts_11) { - var rule_loop; - var head; - var def; - return ((defs instanceof sc_Pair)?((def = (defs.car)), (head = (def.car)), (rule_loop = function(rules, sc_nts_12) { - var nt; - var l; - var sc_nts_13; - var rule; - if ((rules instanceof sc_Pair)) - { - (rule = (rules.car)); - (l = rule); - (sc_nts_13 = sc_nts_12); - while ((l instanceof sc_Pair)) { - { - (nt = (l.car)); - (l = (l.cdr)); - (sc_nts_13 = (((sc_member(nt, sc_nts_13))!== false)?sc_nts_13:(new sc_Pair(nt, sc_nts_13)))); - } - } - return (rule_loop((rules.cdr), sc_nts_13)); - } - else - return (BgL_sc_defzd2loop_9zd2((defs.cdr), sc_nts_12)); - }), (rule_loop((def.cdr), (((sc_member(head, sc_nts_11))!== false)?sc_nts_11:(new sc_Pair(head, sc_nts_11)))))):(sc_list2vector((sc_reverse(sc_nts_11))))); - }), (BgL_sc_defzd2loop_9zd2(grammar, null)))); - (BgL_sc_nbzd2nts_7zd2 = (sc_nts_8.length)); - (nb_confs = (((BgL_sc_defzd2loop_6zd2 = function(defs, BgL_sc_nbzd2confs_14zd2) { - var rule_loop; - var def; - return ((defs instanceof sc_Pair)?((def = (defs.car)), (rule_loop = function(rules, BgL_sc_nbzd2confs_15zd2) { - var l; - var BgL_sc_nbzd2confs_16zd2; - var rule; - if ((rules instanceof sc_Pair)) - { - (rule = (rules.car)); - (l = rule); - (BgL_sc_nbzd2confs_16zd2 = BgL_sc_nbzd2confs_15zd2); - while ((l instanceof sc_Pair)) { - { - (l = (l.cdr)); - (++BgL_sc_nbzd2confs_16zd2); - } - } - return (rule_loop((rules.cdr), (BgL_sc_nbzd2confs_16zd2+(1)))); - } - else - return (BgL_sc_defzd2loop_6zd2((defs.cdr), BgL_sc_nbzd2confs_15zd2)); - }), (rule_loop((def.cdr), BgL_sc_nbzd2confs_14zd2))):BgL_sc_nbzd2confs_14zd2); - }), (BgL_sc_defzd2loop_6zd2(grammar, (0))))+BgL_sc_nbzd2nts_7zd2)); - (sc_starters_5 = (sc_makeVector(BgL_sc_nbzd2nts_7zd2, null))); - (sc_enders_4 = (sc_makeVector(BgL_sc_nbzd2nts_7zd2, null))); - (sc_predictors_3 = (sc_makeVector(BgL_sc_nbzd2nts_7zd2, null))); - (sc_steps_2 = (sc_makeVector(nb_confs, false))); - (sc_names_1 = (sc_makeVector(nb_confs, false))); - (nts = sc_nts_8); - (starters = sc_starters_5); - (enders = sc_enders_4); - (predictors = sc_predictors_3); - (steps = sc_steps_2); - (names = sc_names_1); - (nb_nts = (sc_nts_8.length)); - (i = (nb_nts-(1))); - while ((i>=(0))) { - { - (sc_steps_2[i] = (i-nb_nts)); - (sc_names_1[i] = (sc_list((sc_nts_8[i]), (0)))); - (sc_enders_4[i] = (sc_list(i))); - (--i); - } - } - def_loop = function(defs, conf) { - var rule_loop; - var head; - var def; - return ((defs instanceof sc_Pair)?((def = (defs.car)), (head = (def.car)), (rule_loop = function(rules, conf, rule_num) { - var i; - var sc_i_17; - var nt; - var l; - var sc_conf_18; - var sc_i_19; - var rule; - if ((rules instanceof sc_Pair)) - { - (rule = (rules.car)); - (names[conf] = (sc_list(head, rule_num))); - (sc_i_19 = (ind(head, nts))); - (starters[sc_i_19] = (new sc_Pair(conf, (starters[sc_i_19])))); - (l = rule); - (sc_conf_18 = conf); - while ((l instanceof sc_Pair)) { - { - (nt = (l.car)); - (steps[sc_conf_18] = (ind(nt, nts))); - (sc_i_17 = (ind(nt, nts))); - (predictors[sc_i_17] = (new sc_Pair(sc_conf_18, (predictors[sc_i_17])))); - (l = (l.cdr)); - (++sc_conf_18); - } - } - (steps[sc_conf_18] = ((ind(head, nts))-nb_nts)); - (i = (ind(head, nts))); - (enders[i] = (new sc_Pair(sc_conf_18, (enders[i])))); - return (rule_loop((rules.cdr), (sc_conf_18+(1)), (rule_num+(1)))); - } - else - return (def_loop((defs.cdr), conf)); - }), (rule_loop((def.cdr), conf, (1)))):undefined); - }; - (def_loop(grammar, (sc_nts_8.length))); - (parser_descr = [lexer, sc_nts_8, sc_starters_5, sc_enders_4, sc_predictors_3, sc_steps_2, sc_names_1]); - return function(input) { - var optrOpnd; - var sc_optrOpnd_20; - var sc_optrOpnd_21; - var sc_optrOpnd_22; - var loop1; - var BgL_sc_stateza2_23za2; - var toks; - var BgL_sc_nbzd2nts_24zd2; - var sc_steps_25; - var sc_enders_26; - var state_num; - var BgL_sc_statesza2_27za2; - var states; - var i; - var conf; - var l; - var tok_nts; - var sc_i_28; - var sc_i_29; - var l1; - var l2; - var tok; - var tail1129; - var L1125; - var goal_enders; - var BgL_sc_statesza2_30za2; - var BgL_sc_nbzd2nts_31zd2; - var BgL_sc_nbzd2confs_32zd2; - var nb_toks; - var goal_starters; - var sc_states_33; - var BgL_sc_nbzd2confs_34zd2; - var BgL_sc_nbzd2toks_35zd2; - var sc_toks_36; - var falseHead1128; - var sc_names_37; - var sc_steps_38; - var sc_predictors_39; - var sc_enders_40; - var sc_starters_41; - var sc_nts_42; - var lexer; - var sc_ind_43; - var make_states; - var BgL_sc_confzd2setzd2getza2_44za2; - var conf_set_merge_new_bang; - var conf_set_adjoin; - var BgL_sc_confzd2setzd2adjoinza2_45za2; - var BgL_sc_confzd2setzd2adjoinza2za2_46z00; - var conf_set_union; - var forw; - var is_parsed; - var deriv_trees; - var BgL_sc_derivzd2treesza2_47z70; - var nb_deriv_trees; - var BgL_sc_nbzd2derivzd2treesza2_48za2; - { - sc_ind_43 = function(nt, sc_nts_49) { - var i; - { - (i = ((sc_nts_49.length)-(1))); - while (true) { - if ((i>=(0))) - if ((sc_isEqual((sc_nts_49[i]), nt))) - return i; - else - (--i); - else - return false; - } - } - }; - make_states = function(BgL_sc_nbzd2toks_50zd2, BgL_sc_nbzd2confs_51zd2) { - var v; - var i; - var sc_states_52; - { - (sc_states_52 = (sc_makeVector((BgL_sc_nbzd2toks_50zd2+(1)), false))); - (i = BgL_sc_nbzd2toks_50zd2); - while ((i>=(0))) { - { - (v = (sc_makeVector((BgL_sc_nbzd2confs_51zd2+(1)), false))); - (v[(0)] = (-1)); - (sc_states_52[i] = v); - (--i); - } - } - return sc_states_52; - } - }; - BgL_sc_confzd2setzd2getza2_44za2 = function(state, BgL_sc_statezd2num_53zd2, sc_conf_54) { - var conf_set; - var BgL_sc_confzd2set_55zd2; - return ((BgL_sc_confzd2set_55zd2 = (state[(sc_conf_54+(1))])), ((BgL_sc_confzd2set_55zd2!== false)?BgL_sc_confzd2set_55zd2:((conf_set = (sc_makeVector((BgL_sc_statezd2num_53zd2+(6)), false))), (conf_set[(1)] = (-3)), (conf_set[(2)] = (-1)), (conf_set[(3)] = (-1)), (conf_set[(4)] = (-1)), (state[(sc_conf_54+(1))] = conf_set), conf_set))); - }; - conf_set_merge_new_bang = function(conf_set) { - return ((conf_set[((conf_set[(1)])+(5))] = (conf_set[(4)])), (conf_set[(1)] = (conf_set[(3)])), (conf_set[(3)] = (-1)), (conf_set[(4)] = (-1))); - }; - conf_set_adjoin = function(state, conf_set, sc_conf_56, i) { - var tail; - return ((tail = (conf_set[(3)])), (conf_set[(i+(5))] = (-1)), (conf_set[(tail+(5))] = i), (conf_set[(3)] = i), ((tail<(0))?((conf_set[(0)] = (state[(0)])), (state[(0)] = sc_conf_56)):undefined)); - }; - BgL_sc_confzd2setzd2adjoinza2_45za2 = function(sc_states_57, BgL_sc_statezd2num_58zd2, l, i) { - var conf_set; - var sc_conf_59; - var l1; - var state; - { - (state = (sc_states_57[BgL_sc_statezd2num_58zd2])); - (l1 = l); - while ((l1 instanceof sc_Pair)) { - { - (sc_conf_59 = (l1.car)); - (conf_set = (BgL_sc_confzd2setzd2getza2_44za2(state, BgL_sc_statezd2num_58zd2, sc_conf_59))); - if (((conf_set[(i+(5))])=== false)) - { - (conf_set_adjoin(state, conf_set, sc_conf_59, i)); - (l1 = (l1.cdr)); - } - else - (l1 = (l1.cdr)); - } - } - return undefined; - } - }; - BgL_sc_confzd2setzd2adjoinza2za2_46z00 = function(sc_states_60, BgL_sc_statesza2_61za2, BgL_sc_statezd2num_62zd2, sc_conf_63, i) { - var BgL_sc_confzd2setza2_64z70; - var BgL_sc_stateza2_65za2; - var conf_set; - var state; - return ((state = (sc_states_60[BgL_sc_statezd2num_62zd2])), ((((conf_set = (state[(sc_conf_63+(1))])), ((conf_set!== false)?(conf_set[(i+(5))]):false))!== false)?((BgL_sc_stateza2_65za2 = (BgL_sc_statesza2_61za2[BgL_sc_statezd2num_62zd2])), (BgL_sc_confzd2setza2_64z70 = (BgL_sc_confzd2setzd2getza2_44za2(BgL_sc_stateza2_65za2, BgL_sc_statezd2num_62zd2, sc_conf_63))), (((BgL_sc_confzd2setza2_64z70[(i+(5))])=== false)?(conf_set_adjoin(BgL_sc_stateza2_65za2, BgL_sc_confzd2setza2_64z70, sc_conf_63, i)):undefined), true):false)); - }; - conf_set_union = function(state, conf_set, sc_conf_66, other_set) { - var i; - { - (i = (other_set[(2)])); - while ((i>=(0))) { - if (((conf_set[(i+(5))])=== false)) - { - (conf_set_adjoin(state, conf_set, sc_conf_66, i)); - (i = (other_set[(i+(5))])); - } - else - (i = (other_set[(i+(5))])); - } - return undefined; - } - }; - forw = function(sc_states_67, BgL_sc_statezd2num_68zd2, sc_starters_69, sc_enders_70, sc_predictors_71, sc_steps_72, sc_nts_73) { - var next_set; - var next; - var conf_set; - var ender; - var l; - var starter_set; - var starter; - var sc_l_74; - var sc_loop1_75; - var head; - var BgL_sc_confzd2set_76zd2; - var BgL_sc_statezd2num_77zd2; - var state; - var sc_states_78; - var preds; - var BgL_sc_confzd2set_79zd2; - var step; - var sc_conf_80; - var BgL_sc_nbzd2nts_81zd2; - var sc_state_82; - { - (sc_state_82 = (sc_states_67[BgL_sc_statezd2num_68zd2])); - (BgL_sc_nbzd2nts_81zd2 = (sc_nts_73.length)); - while (true) { - { - (sc_conf_80 = (sc_state_82[(0)])); - if ((sc_conf_80>=(0))) - { - (step = (sc_steps_72[sc_conf_80])); - (BgL_sc_confzd2set_79zd2 = (sc_state_82[(sc_conf_80+(1))])); - (head = (BgL_sc_confzd2set_79zd2[(4)])); - (sc_state_82[(0)] = (BgL_sc_confzd2set_79zd2[(0)])); - (conf_set_merge_new_bang(BgL_sc_confzd2set_79zd2)); - if ((step>=(0))) - { - (sc_l_74 = (sc_starters_69[step])); - while ((sc_l_74 instanceof sc_Pair)) { - { - (starter = (sc_l_74.car)); - (starter_set = (BgL_sc_confzd2setzd2getza2_44za2(sc_state_82, BgL_sc_statezd2num_68zd2, starter))); - if (((starter_set[(BgL_sc_statezd2num_68zd2+(5))])=== false)) - { - (conf_set_adjoin(sc_state_82, starter_set, starter, BgL_sc_statezd2num_68zd2)); - (sc_l_74 = (sc_l_74.cdr)); - } - else - (sc_l_74 = (sc_l_74.cdr)); - } - } - (l = (sc_enders_70[step])); - while ((l instanceof sc_Pair)) { - { - (ender = (l.car)); - if ((((conf_set = (sc_state_82[(ender+(1))])), ((conf_set!== false)?(conf_set[(BgL_sc_statezd2num_68zd2+(5))]):false))!== false)) - { - (next = (sc_conf_80+(1))); - (next_set = (BgL_sc_confzd2setzd2getza2_44za2(sc_state_82, BgL_sc_statezd2num_68zd2, next))); - (conf_set_union(sc_state_82, next_set, next, BgL_sc_confzd2set_79zd2)); - (l = (l.cdr)); - } - else - (l = (l.cdr)); - } - } - } - else - { - (preds = (sc_predictors_71[(step+BgL_sc_nbzd2nts_81zd2)])); - (sc_states_78 = sc_states_67); - (state = sc_state_82); - (BgL_sc_statezd2num_77zd2 = BgL_sc_statezd2num_68zd2); - (BgL_sc_confzd2set_76zd2 = BgL_sc_confzd2set_79zd2); - sc_loop1_75 = function(l) { - var sc_state_83; - var BgL_sc_nextzd2set_84zd2; - var sc_next_85; - var pred_set; - var i; - var pred; - if ((l instanceof sc_Pair)) - { - (pred = (l.car)); - (i = head); - while ((i>=(0))) { - { - (pred_set = ((sc_state_83 = (sc_states_78[i])), (sc_state_83[(pred+(1))]))); - if ((pred_set!== false)) - { - (sc_next_85 = (pred+(1))); - (BgL_sc_nextzd2set_84zd2 = (BgL_sc_confzd2setzd2getza2_44za2(state, BgL_sc_statezd2num_77zd2, sc_next_85))); - (conf_set_union(state, BgL_sc_nextzd2set_84zd2, sc_next_85, pred_set)); - } - (i = (BgL_sc_confzd2set_76zd2[(i+(5))])); - } - } - return (sc_loop1_75((l.cdr))); - } - else - return undefined; - }; - (sc_loop1_75(preds)); - } - } - else - return undefined; - } - } - } - }; - is_parsed = function(nt, i, j, sc_nts_86, sc_enders_87, sc_states_88) { - var conf_set; - var state; - var sc_conf_89; - var l; - var BgL_sc_ntza2_90za2; - { - (BgL_sc_ntza2_90za2 = (sc_ind_43(nt, sc_nts_86))); - if ((BgL_sc_ntza2_90za2!== false)) - { - (sc_nts_86.length); - (l = (sc_enders_87[BgL_sc_ntza2_90za2])); - while (true) { - if ((l instanceof sc_Pair)) - { - (sc_conf_89 = (l.car)); - if ((((state = (sc_states_88[j])), (conf_set = (state[(sc_conf_89+(1))])), ((conf_set!== false)?(conf_set[(i+(5))]):false))!== false)) - return true; - else - (l = (l.cdr)); - } - else - return false; - } - } - else - return false; - } - }; - deriv_trees = function(sc_conf_91, i, j, sc_enders_92, sc_steps_93, sc_names_94, sc_toks_95, sc_states_96, BgL_sc_nbzd2nts_97zd2) { - var sc_loop1_98; - var prev; - var name; - return ((name = (sc_names_94[sc_conf_91])), ((name!== false)?((sc_conf_91=(0))) - if (((k>=i)&&(((sc_state_99 = (sc_states_96[k])), (conf_set = (sc_state_99[(prev+(1))])), ((conf_set!== false)?(conf_set[(i+(5))]):false))!== false))) - { - (prev_trees = (deriv_trees(prev, i, k, sc_enders_92, sc_steps_93, sc_names_94, sc_toks_95, sc_states_96, BgL_sc_nbzd2nts_97zd2))); - (ender_trees = (deriv_trees(ender, k, j, sc_enders_92, sc_steps_93, sc_names_94, sc_toks_95, sc_states_96, BgL_sc_nbzd2nts_97zd2))); - loop3 = function(l3, l2) { - var l4; - var sc_l2_100; - var ender_tree; - if ((l3 instanceof sc_Pair)) - { - (ender_tree = (sc_list((l3.car)))); - (l4 = prev_trees); - (sc_l2_100 = l2); - while ((l4 instanceof sc_Pair)) { - { - (sc_l2_100 = (new sc_Pair((sc_append((l4.car), ender_tree)), sc_l2_100))); - (l4 = (l4.cdr)); - } - } - return (loop3((l3.cdr), sc_l2_100)); - } - else - return (loop2((ender_set[(k+(5))]), l2)); - }; - return (loop3(ender_trees, l2)); - } - else - (k = (ender_set[(k+(5))])); - else - return (sc_loop1_98((l1.cdr), l2)); - } - }; - return (loop2((ender_set[(2)]), l2)); - } - else - (l1 = (l1.cdr)); - } - else - return l2; - } - }), (sc_loop1_98((sc_enders_92[(sc_steps_93[prev])]), null))))); - }; - BgL_sc_derivzd2treesza2_47z70 = function(nt, i, j, sc_nts_101, sc_enders_102, sc_steps_103, sc_names_104, sc_toks_105, sc_states_106) { - var conf_set; - var state; - var sc_conf_107; - var l; - var trees; - var BgL_sc_nbzd2nts_108zd2; - var BgL_sc_ntza2_109za2; - { - (BgL_sc_ntza2_109za2 = (sc_ind_43(nt, sc_nts_101))); - if ((BgL_sc_ntza2_109za2!== false)) - { - (BgL_sc_nbzd2nts_108zd2 = (sc_nts_101.length)); - (l = (sc_enders_102[BgL_sc_ntza2_109za2])); - (trees = null); - while ((l instanceof sc_Pair)) { - { - (sc_conf_107 = (l.car)); - if ((((state = (sc_states_106[j])), (conf_set = (state[(sc_conf_107+(1))])), ((conf_set!== false)?(conf_set[(i+(5))]):false))!== false)) - { - (l = (l.cdr)); - (trees = (sc_append((deriv_trees(sc_conf_107, i, j, sc_enders_102, sc_steps_103, sc_names_104, sc_toks_105, sc_states_106, BgL_sc_nbzd2nts_108zd2)), trees))); - } - else - (l = (l.cdr)); - } - } - return trees; - } - else - return false; - } - }; - nb_deriv_trees = function(sc_conf_110, i, j, sc_enders_111, sc_steps_112, sc_toks_113, sc_states_114, BgL_sc_nbzd2nts_115zd2) { - var sc_loop1_116; - var tmp1124; - var prev; - return ((prev = (sc_conf_110-(1))), ((((tmp1124 = (sc_conf_110=(0))) { - if (((k>=i)&&(((state = (sc_states_114[k])), (conf_set = (state[(prev+(1))])), ((conf_set!== false)?(conf_set[(i+(5))]):false))!== false))) - { - (nb_prev_trees = (nb_deriv_trees(prev, i, k, sc_enders_111, sc_steps_112, sc_toks_113, sc_states_114, BgL_sc_nbzd2nts_115zd2))); - (nb_ender_trees = (nb_deriv_trees(ender, k, j, sc_enders_111, sc_steps_112, sc_toks_113, sc_states_114, BgL_sc_nbzd2nts_115zd2))); - (k = (ender_set[(k+(5))])); - (n +=(nb_prev_trees*nb_ender_trees)); - } - else - (k = (ender_set[(k+(5))])); - } - return (sc_loop1_116((l.cdr), n)); - } - else - (l = (l.cdr)); - } - else - return sc_n_118; - } - }), (sc_loop1_116((sc_enders_111[(sc_steps_112[prev])]), (0)))))); - }; - BgL_sc_nbzd2derivzd2treesza2_48za2 = function(nt, i, j, sc_nts_119, sc_enders_120, sc_steps_121, sc_toks_122, sc_states_123) { - var conf_set; - var state; - var sc_conf_124; - var l; - var nb_trees; - var BgL_sc_nbzd2nts_125zd2; - var BgL_sc_ntza2_126za2; - { - (BgL_sc_ntza2_126za2 = (sc_ind_43(nt, sc_nts_119))); - if ((BgL_sc_ntza2_126za2!== false)) - { - (BgL_sc_nbzd2nts_125zd2 = (sc_nts_119.length)); - (l = (sc_enders_120[BgL_sc_ntza2_126za2])); - (nb_trees = (0)); - while ((l instanceof sc_Pair)) { - { - (sc_conf_124 = (l.car)); - if ((((state = (sc_states_123[j])), (conf_set = (state[(sc_conf_124+(1))])), ((conf_set!== false)?(conf_set[(i+(5))]):false))!== false)) - { - (l = (l.cdr)); - (nb_trees = ((nb_deriv_trees(sc_conf_124, i, j, sc_enders_120, sc_steps_121, sc_toks_122, sc_states_123, BgL_sc_nbzd2nts_125zd2))+nb_trees)); - } - else - (l = (l.cdr)); - } - } - return nb_trees; - } - else - return false; - } - }; - (lexer = (parser_descr[(0)])); - (sc_nts_42 = (parser_descr[(1)])); - (sc_starters_41 = (parser_descr[(2)])); - (sc_enders_40 = (parser_descr[(3)])); - (sc_predictors_39 = (parser_descr[(4)])); - (sc_steps_38 = (parser_descr[(5)])); - (sc_names_37 = (parser_descr[(6)])); - (falseHead1128 = (new sc_Pair(null, null))); - (L1125 = (lexer(input))); - (tail1129 = falseHead1128); - while (!(L1125 === null)) { - { - (tok = (L1125.car)); - (l1 = (tok.cdr)); - (l2 = null); - while ((l1 instanceof sc_Pair)) { - { - (sc_i_29 = (sc_ind_43((l1.car), sc_nts_42))); - if ((sc_i_29!== false)) - { - (l1 = (l1.cdr)); - (l2 = (new sc_Pair(sc_i_29, l2))); - } - else - (l1 = (l1.cdr)); - } - } - (sc_optrOpnd_22 = (new sc_Pair((tok.car), (sc_reverse(l2))))); - (sc_optrOpnd_21 = (new sc_Pair(sc_optrOpnd_22, null))); - (tail1129.cdr = sc_optrOpnd_21); - (tail1129 = (tail1129.cdr)); - (L1125 = (L1125.cdr)); - } - } - (sc_optrOpnd_20 = (falseHead1128.cdr)); - (sc_toks_36 = (sc_list2vector(sc_optrOpnd_20))); - (BgL_sc_nbzd2toks_35zd2 = (sc_toks_36.length)); - (BgL_sc_nbzd2confs_34zd2 = (sc_steps_38.length)); - (sc_states_33 = (make_states(BgL_sc_nbzd2toks_35zd2, BgL_sc_nbzd2confs_34zd2))); - (goal_starters = (sc_starters_41[(0)])); - (BgL_sc_confzd2setzd2adjoinza2_45za2(sc_states_33, (0), goal_starters, (0))); - (forw(sc_states_33, (0), sc_starters_41, sc_enders_40, sc_predictors_39, sc_steps_38, sc_nts_42)); - (sc_i_28 = (0)); - while ((sc_i_28=(0))) { - { - (states = sc_states_33); - (BgL_sc_statesza2_27za2 = BgL_sc_statesza2_30za2); - (state_num = i); - (sc_enders_26 = sc_enders_40); - (sc_steps_25 = sc_steps_38); - (BgL_sc_nbzd2nts_24zd2 = BgL_sc_nbzd2nts_31zd2); - (toks = sc_toks_36); - (BgL_sc_stateza2_23za2 = (BgL_sc_statesza2_30za2[i])); - loop1 = function() { - var sc_loop1_127; - var prev; - var BgL_sc_statesza2_128za2; - var sc_states_129; - var j; - var i; - var sc_i_130; - var head; - var conf_set; - var sc_conf_131; - { - (sc_conf_131 = (BgL_sc_stateza2_23za2[(0)])); - if ((sc_conf_131>=(0))) - { - (conf_set = (BgL_sc_stateza2_23za2[(sc_conf_131+(1))])); - (head = (conf_set[(4)])); - (BgL_sc_stateza2_23za2[(0)] = (conf_set[(0)])); - (conf_set_merge_new_bang(conf_set)); - (sc_i_130 = head); - while ((sc_i_130>=(0))) { - { - (i = sc_i_130); - (j = state_num); - (sc_states_129 = states); - (BgL_sc_statesza2_128za2 = BgL_sc_statesza2_27za2); - (prev = (sc_conf_131-(1))); - if (((sc_conf_131>=BgL_sc_nbzd2nts_24zd2)&&((sc_steps_25[prev])>=(0)))) - { - sc_loop1_127 = function(l) { - var k; - var ender_set; - var state; - var ender; - var l; - while (true) { - if ((l instanceof sc_Pair)) - { - (ender = (l.car)); - (ender_set = ((state = (sc_states_129[j])), (state[(ender+(1))]))); - if ((ender_set!== false)) - { - (k = (ender_set[(2)])); - while ((k>=(0))) { - { - if ((k>=i)) - if (((BgL_sc_confzd2setzd2adjoinza2za2_46z00(sc_states_129, BgL_sc_statesza2_128za2, k, prev, i))!== false)) - (BgL_sc_confzd2setzd2adjoinza2za2_46z00(sc_states_129, BgL_sc_statesza2_128za2, j, ender, k)); - (k = (ender_set[(k+(5))])); - } - } - return (sc_loop1_127((l.cdr))); - } - else - (l = (l.cdr)); - } - else - return undefined; - } - }; - (sc_loop1_127((sc_enders_26[(sc_steps_25[prev])]))); - } - (sc_i_130 = (conf_set[(sc_i_130+(5))])); - } - } - return (loop1()); - } - else - return undefined; - } - }; - (loop1()); - (--i); - } - } - (optrOpnd = BgL_sc_statesza2_30za2); - return [sc_nts_42, sc_starters_41, sc_enders_40, sc_predictors_39, sc_steps_38, sc_names_37, sc_toks_36, optrOpnd, is_parsed, BgL_sc_derivzd2treesza2_47z70, BgL_sc_nbzd2derivzd2treesza2_48za2]; - } - }; - } - }; - BgL_parsezd2ze3parsedzf3zc2 = function(parse, nt, i, j) { - var is_parsed; - var states; - var enders; - var nts; - return ((nts = (parse[(0)])), (enders = (parse[(2)])), (states = (parse[(7)])), (is_parsed = (parse[(8)])), (is_parsed(nt, i, j, nts, enders, states))); - }; - BgL_parsezd2ze3treesz31 = function(parse, nt, i, j) { - var BgL_sc_derivzd2treesza2_132z70; - var states; - var toks; - var names; - var steps; - var enders; - var nts; - return ((nts = (parse[(0)])), (enders = (parse[(2)])), (steps = (parse[(4)])), (names = (parse[(5)])), (toks = (parse[(6)])), (states = (parse[(7)])), (BgL_sc_derivzd2treesza2_132z70 = (parse[(9)])), (BgL_sc_derivzd2treesza2_132z70(nt, i, j, nts, enders, steps, names, toks, states))); - }; - BgL_parsezd2ze3nbzd2treesze3 = function(parse, nt, i, j) { - var BgL_sc_nbzd2derivzd2treesza2_133za2; - var states; - var toks; - var steps; - var enders; - var nts; - return ((nts = (parse[(0)])), (enders = (parse[(2)])), (steps = (parse[(4)])), (toks = (parse[(6)])), (states = (parse[(7)])), (BgL_sc_nbzd2derivzd2treesza2_133za2 = (parse[(10)])), (BgL_sc_nbzd2derivzd2treesza2_133za2(nt, i, j, nts, enders, steps, toks, states))); - }; - test = function(k) { - var x; - var p; - return ((p = (BgL_makezd2parserzd2(const_earley, function(l) { - var sc_x_134; - var tail1134; - var L1130; - var falseHead1133; - { - (falseHead1133 = (new sc_Pair(null, null))); - (tail1134 = falseHead1133); - (L1130 = l); - while (!(L1130 === null)) { - { - (tail1134.cdr = (new sc_Pair(((sc_x_134 = (L1130.car)), (sc_list(sc_x_134, sc_x_134))), null))); - (tail1134 = (tail1134.cdr)); - (L1130 = (L1130.cdr)); - } - } - return (falseHead1133.cdr); - } - }))), (x = (p((sc_vector2list((sc_makeVector(k, "\u1E9Ca"))))))), (sc_length((BgL_parsezd2ze3treesz31(x, "\u1E9Cs", (0), k))))); - }; - BgL_earleyzd2benchmarkzd2 = function() { - var args = null; - for (var sc_tmp = arguments.length - 1; sc_tmp >= 0; sc_tmp--) { - args = sc_cons(arguments[sc_tmp], args); - } - var k; - return ((k = ((args === null)?(7):(args.car))), (BgL_runzd2benchmarkzd2("earley", (1), function() { - return (test(k)); - }, function(result) { - return ((sc_display(result)), (sc_newline()), result == 132); - }))); - }; -} - - -/************* END OF GENERATED CODE *************/ -// Invoke this function to run a benchmark. -// The first argument is a string identifying the benchmark. -// The second argument is the number of times to run the benchmark. -// The third argument is a function that runs the benchmark. -// The fourth argument is a unary function that warns if the result -// returned by the benchmark is incorrect. -// -// Example: -// RunBenchmark("new Array()", -// 1, -// function () { new Array(1000000); } -// function (v) { -// return (v instanceof Array) && (v.length == 1000000); -// }); - -SC_DEFAULT_OUT = new sc_GenericOutputPort(function(s) {}); -SC_ERROR_OUT = SC_DEFAULT_OUT; - -function RunBenchmark(name, count, run, warn) { - for (var n = 0; n < count; ++n) { - result = run(); - if (!warn(result)) { - throw new Error("Earley or Boyer did incorrect number of rewrites"); - } - } -} - -var BgL_runzd2benchmarkzd2 = RunBenchmark; - diff --git a/regexp2000/benchmarks/raytrace.js b/regexp2000/benchmarks/raytrace.js deleted file mode 100644 index 925d0ed35..000000000 --- a/regexp2000/benchmarks/raytrace.js +++ /dev/null @@ -1,3434 +0,0 @@ -// The ray tracer code in this file is written by Adam Burmister. It -// is available in its original form from: -// -// http://labs.flog.nz.co/raytracer/ -// -// It has been modified slightly by Google to work as a standalone -// benchmark, but the all the computational code remains -// untouched. This file also contains a copy of the Prototype -// JavaScript framework which is used by the ray tracer. - -var RayTrace = new BenchmarkSuite('RayTrace', 932666, [ - new Benchmark('RayTrace', renderScene) -]); - - -var checkNumber; - -// Create dummy objects if we're not running in a browser. -if (typeof document == 'undefined') { - document = { }; - window = { opera: null }; - navigator = { userAgent: null, appVersion: "" }; -} - - -// ------------------------------------------------------------------------ -// ------------------------------------------------------------------------ - - -/* Prototype JavaScript framework, version 1.5.0 - * (c) 2005-2007 Sam Stephenson - * - * Prototype is freely distributable under the terms of an MIT-style license. - * For details, see the Prototype web site: http://prototype.conio.net/ - * -/*--------------------------------------------------------------------------*/ - -//-------------------- -var Prototype = { - Version: '1.5.0', - BrowserFeatures: { - XPath: !!document.evaluate - }, - - ScriptFragment: '(?:)((\n|\r|.)*?)(?:<\/script>)', - emptyFunction: function() {}, - K: function(x) { return x } -} - -var Class = { - create: function() { - return function() { - this.initialize.apply(this, arguments); - } - } -} - -var Abstract = new Object(); - -Object.extend = function(destination, source) { - for (var property in source) { - destination[property] = source[property]; - } - return destination; -} - -Object.extend(Object, { - inspect: function(object) { - try { - if (object === undefined) return 'undefined'; - if (object === null) return 'null'; - return object.inspect ? object.inspect() : object.toString(); - } catch (e) { - if (e instanceof RangeError) return '...'; - throw e; - } - }, - - keys: function(object) { - var keys = []; - for (var property in object) - keys.push(property); - return keys; - }, - - values: function(object) { - var values = []; - for (var property in object) - values.push(object[property]); - return values; - }, - - clone: function(object) { - return Object.extend({}, object); - } -}); - -Function.prototype.bind = function() { - var __method = this, args = $A(arguments), object = args.shift(); - return function() { - return __method.apply(object, args.concat($A(arguments))); - } -} - -Function.prototype.bindAsEventListener = function(object) { - var __method = this, args = $A(arguments), object = args.shift(); - return function(event) { - return __method.apply(object, [( event || window.event)].concat(args).concat($A(arguments))); - } -} - -Object.extend(Number.prototype, { - toColorPart: function() { - var digits = this.toString(16); - if (this < 16) return '0' + digits; - return digits; - }, - - succ: function() { - return this + 1; - }, - - times: function(iterator) { - $R(0, this, true).each(iterator); - return this; - } -}); - -var Try = { - these: function() { - var returnValue; - - for (var i = 0, length = arguments.length; i < length; i++) { - var lambda = arguments[i]; - try { - returnValue = lambda(); - break; - } catch (e) {} - } - - return returnValue; - } -} - -/*--------------------------------------------------------------------------*/ - -var PeriodicalExecuter = Class.create(); -PeriodicalExecuter.prototype = { - initialize: function(callback, frequency) { - this.callback = callback; - this.frequency = frequency; - this.currentlyExecuting = false; - - this.registerCallback(); - }, - - registerCallback: function() { - this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000); - }, - - stop: function() { - if (!this.timer) return; - clearInterval(this.timer); - this.timer = null; - }, - - onTimerEvent: function() { - if (!this.currentlyExecuting) { - try { - this.currentlyExecuting = true; - this.callback(this); - } finally { - this.currentlyExecuting = false; - } - } - } -} -String.interpret = function(value){ - return value == null ? '' : String(value); -} - -Object.extend(String.prototype, { - gsub: function(pattern, replacement) { - var result = '', source = this, match; - replacement = arguments.callee.prepareReplacement(replacement); - - while (source.length > 0) { - if (match = source.match(pattern)) { - result += source.slice(0, match.index); - result += String.interpret(replacement(match)); - source = source.slice(match.index + match[0].length); - } else { - result += source, source = ''; - } - } - return result; - }, - - sub: function(pattern, replacement, count) { - replacement = this.gsub.prepareReplacement(replacement); - count = count === undefined ? 1 : count; - - return this.gsub(pattern, function(match) { - if (--count < 0) return match[0]; - return replacement(match); - }); - }, - - scan: function(pattern, iterator) { - this.gsub(pattern, iterator); - return this; - }, - - truncate: function(length, truncation) { - length = length || 30; - truncation = truncation === undefined ? '...' : truncation; - return this.length > length ? - this.slice(0, length - truncation.length) + truncation : this; - }, - - strip: function() { - return this.replace(/^\s+/, '').replace(/\s+$/, ''); - }, - - stripTags: function() { - return this.replace(/<\/?[^>]+>/gi, ''); - }, - - stripScripts: function() { - return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), ''); - }, - - extractScripts: function() { - var matchAll = new RegExp(Prototype.ScriptFragment, 'img'); - var matchOne = new RegExp(Prototype.ScriptFragment, 'im'); - return (this.match(matchAll) || []).map(function(scriptTag) { - return (scriptTag.match(matchOne) || ['', ''])[1]; - }); - }, - - evalScripts: function() { - return this.extractScripts().map(function(script) { return eval(script) }); - }, - - escapeHTML: function() { - var div = document.createElement('div'); - var text = document.createTextNode(this); - div.appendChild(text); - return div.innerHTML; - }, - - unescapeHTML: function() { - var div = document.createElement('div'); - div.innerHTML = this.stripTags(); - return div.childNodes[0] ? (div.childNodes.length > 1 ? - $A(div.childNodes).inject('',function(memo,node){ return memo+node.nodeValue }) : - div.childNodes[0].nodeValue) : ''; - }, - - toQueryParams: function(separator) { - var match = this.strip().match(/([^?#]*)(#.*)?$/); - if (!match) return {}; - - return match[1].split(separator || '&').inject({}, function(hash, pair) { - if ((pair = pair.split('='))[0]) { - var name = decodeURIComponent(pair[0]); - var value = pair[1] ? decodeURIComponent(pair[1]) : undefined; - - if (hash[name] !== undefined) { - if (hash[name].constructor != Array) - hash[name] = [hash[name]]; - if (value) hash[name].push(value); - } - else hash[name] = value; - } - return hash; - }); - }, - - toArray: function() { - return this.split(''); - }, - - succ: function() { - return this.slice(0, this.length - 1) + - String.fromCharCode(this.charCodeAt(this.length - 1) + 1); - }, - - camelize: function() { - var parts = this.split('-'), len = parts.length; - if (len == 1) return parts[0]; - - var camelized = this.charAt(0) == '-' - ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1) - : parts[0]; - - for (var i = 1; i < len; i++) - camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1); - - return camelized; - }, - - capitalize: function(){ - return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase(); - }, - - underscore: function() { - return this.gsub(/::/, '/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{1}_#{2}').gsub(/-/,'_').toLowerCase(); - }, - - dasherize: function() { - return this.gsub(/_/,'-'); - }, - - inspect: function(useDoubleQuotes) { - var escapedString = this.replace(/\\/g, '\\\\'); - if (useDoubleQuotes) - return '"' + escapedString.replace(/"/g, '\\"') + '"'; - else - return "'" + escapedString.replace(/'/g, '\\\'') + "'"; - } -}); - -String.prototype.gsub.prepareReplacement = function(replacement) { - if (typeof replacement == 'function') return replacement; - var template = new Template(replacement); - return function(match) { return template.evaluate(match) }; -} - -String.prototype.parseQuery = String.prototype.toQueryParams; - -var Template = Class.create(); -Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/; -Template.prototype = { - initialize: function(template, pattern) { - this.template = template.toString(); - this.pattern = pattern || Template.Pattern; - }, - - evaluate: function(object) { - return this.template.gsub(this.pattern, function(match) { - var before = match[1]; - if (before == '\\') return match[2]; - return before + String.interpret(object[match[3]]); - }); - } -} - -var $break = new Object(); -var $continue = new Object(); - -var Enumerable = { - each: function(iterator) { - var index = 0; - try { - this._each(function(value) { - try { - iterator(value, index++); - } catch (e) { - if (e != $continue) throw e; - } - }); - } catch (e) { - if (e != $break) throw e; - } - return this; - }, - - eachSlice: function(number, iterator) { - var index = -number, slices = [], array = this.toArray(); - while ((index += number) < array.length) - slices.push(array.slice(index, index+number)); - return slices.map(iterator); - }, - - all: function(iterator) { - var result = true; - this.each(function(value, index) { - result = result && !!(iterator || Prototype.K)(value, index); - if (!result) throw $break; - }); - return result; - }, - - any: function(iterator) { - var result = false; - this.each(function(value, index) { - if (result = !!(iterator || Prototype.K)(value, index)) - throw $break; - }); - return result; - }, - - collect: function(iterator) { - var results = []; - this.each(function(value, index) { - results.push((iterator || Prototype.K)(value, index)); - }); - return results; - }, - - detect: function(iterator) { - var result; - this.each(function(value, index) { - if (iterator(value, index)) { - result = value; - throw $break; - } - }); - return result; - }, - - findAll: function(iterator) { - var results = []; - this.each(function(value, index) { - if (iterator(value, index)) - results.push(value); - }); - return results; - }, - - grep: function(pattern, iterator) { - var results = []; - this.each(function(value, index) { - var stringValue = value.toString(); - if (stringValue.match(pattern)) - results.push((iterator || Prototype.K)(value, index)); - }) - return results; - }, - - include: function(object) { - var found = false; - this.each(function(value) { - if (value == object) { - found = true; - throw $break; - } - }); - return found; - }, - - inGroupsOf: function(number, fillWith) { - fillWith = fillWith === undefined ? null : fillWith; - return this.eachSlice(number, function(slice) { - while(slice.length < number) slice.push(fillWith); - return slice; - }); - }, - - inject: function(memo, iterator) { - this.each(function(value, index) { - memo = iterator(memo, value, index); - }); - return memo; - }, - - invoke: function(method) { - var args = $A(arguments).slice(1); - return this.map(function(value) { - return value[method].apply(value, args); - }); - }, - - max: function(iterator) { - var result; - this.each(function(value, index) { - value = (iterator || Prototype.K)(value, index); - if (result == undefined || value >= result) - result = value; - }); - return result; - }, - - min: function(iterator) { - var result; - this.each(function(value, index) { - value = (iterator || Prototype.K)(value, index); - if (result == undefined || value < result) - result = value; - }); - return result; - }, - - partition: function(iterator) { - var trues = [], falses = []; - this.each(function(value, index) { - ((iterator || Prototype.K)(value, index) ? - trues : falses).push(value); - }); - return [trues, falses]; - }, - - pluck: function(property) { - var results = []; - this.each(function(value, index) { - results.push(value[property]); - }); - return results; - }, - - reject: function(iterator) { - var results = []; - this.each(function(value, index) { - if (!iterator(value, index)) - results.push(value); - }); - return results; - }, - - sortBy: function(iterator) { - return this.map(function(value, index) { - return {value: value, criteria: iterator(value, index)}; - }).sort(function(left, right) { - var a = left.criteria, b = right.criteria; - return a < b ? -1 : a > b ? 1 : 0; - }).pluck('value'); - }, - - toArray: function() { - return this.map(); - }, - - zip: function() { - var iterator = Prototype.K, args = $A(arguments); - if (typeof args.last() == 'function') - iterator = args.pop(); - - var collections = [this].concat(args).map($A); - return this.map(function(value, index) { - return iterator(collections.pluck(index)); - }); - }, - - size: function() { - return this.toArray().length; - }, - - inspect: function() { - return '#'; - } -} - -Object.extend(Enumerable, { - map: Enumerable.collect, - find: Enumerable.detect, - select: Enumerable.findAll, - member: Enumerable.include, - entries: Enumerable.toArray -}); -var $A = Array.from = function(iterable) { - if (!iterable) return []; - if (iterable.toArray) { - return iterable.toArray(); - } else { - var results = []; - for (var i = 0, length = iterable.length; i < length; i++) - results.push(iterable[i]); - return results; - } -} - -Object.extend(Array.prototype, Enumerable); - -if (!Array.prototype._reverse) - Array.prototype._reverse = Array.prototype.reverse; - -Object.extend(Array.prototype, { - _each: function(iterator) { - for (var i = 0, length = this.length; i < length; i++) - iterator(this[i]); - }, - - clear: function() { - this.length = 0; - return this; - }, - - first: function() { - return this[0]; - }, - - last: function() { - return this[this.length - 1]; - }, - - compact: function() { - return this.select(function(value) { - return value != null; - }); - }, - - flatten: function() { - return this.inject([], function(array, value) { - return array.concat(value && value.constructor == Array ? - value.flatten() : [value]); - }); - }, - - without: function() { - var values = $A(arguments); - return this.select(function(value) { - return !values.include(value); - }); - }, - - indexOf: function(object) { - for (var i = 0, length = this.length; i < length; i++) - if (this[i] == object) return i; - return -1; - }, - - reverse: function(inline) { - return (inline !== false ? this : this.toArray())._reverse(); - }, - - reduce: function() { - return this.length > 1 ? this : this[0]; - }, - - uniq: function() { - return this.inject([], function(array, value) { - return array.include(value) ? array : array.concat([value]); - }); - }, - - clone: function() { - return [].concat(this); - }, - - size: function() { - return this.length; - }, - - inspect: function() { - return '[' + this.map(Object.inspect).join(', ') + ']'; - } -}); - -Array.prototype.toArray = Array.prototype.clone; - -function $w(string){ - string = string.strip(); - return string ? string.split(/\s+/) : []; -} - -if(window.opera){ - Array.prototype.concat = function(){ - var array = []; - for(var i = 0, length = this.length; i < length; i++) array.push(this[i]); - for(var i = 0, length = arguments.length; i < length; i++) { - if(arguments[i].constructor == Array) { - for(var j = 0, arrayLength = arguments[i].length; j < arrayLength; j++) - array.push(arguments[i][j]); - } else { - array.push(arguments[i]); - } - } - return array; - } -} -var Hash = function(obj) { - Object.extend(this, obj || {}); -}; - -Object.extend(Hash, { - toQueryString: function(obj) { - var parts = []; - - this.prototype._each.call(obj, function(pair) { - if (!pair.key) return; - - if (pair.value && pair.value.constructor == Array) { - var values = pair.value.compact(); - if (values.length < 2) pair.value = values.reduce(); - else { - key = encodeURIComponent(pair.key); - values.each(function(value) { - value = value != undefined ? encodeURIComponent(value) : ''; - parts.push(key + '=' + encodeURIComponent(value)); - }); - return; - } - } - if (pair.value == undefined) pair[1] = ''; - parts.push(pair.map(encodeURIComponent).join('=')); - }); - - return parts.join('&'); - } -}); - -Object.extend(Hash.prototype, Enumerable); -Object.extend(Hash.prototype, { - _each: function(iterator) { - for (var key in this) { - var value = this[key]; - if (value && value == Hash.prototype[key]) continue; - - var pair = [key, value]; - pair.key = key; - pair.value = value; - iterator(pair); - } - }, - - keys: function() { - return this.pluck('key'); - }, - - values: function() { - return this.pluck('value'); - }, - - merge: function(hash) { - return $H(hash).inject(this, function(mergedHash, pair) { - mergedHash[pair.key] = pair.value; - return mergedHash; - }); - }, - - remove: function() { - var result; - for(var i = 0, length = arguments.length; i < length; i++) { - var value = this[arguments[i]]; - if (value !== undefined){ - if (result === undefined) result = value; - else { - if (result.constructor != Array) result = [result]; - result.push(value) - } - } - delete this[arguments[i]]; - } - return result; - }, - - toQueryString: function() { - return Hash.toQueryString(this); - }, - - inspect: function() { - return '#'; - } -}); - -function $H(object) { - if (object && object.constructor == Hash) return object; - return new Hash(object); -}; -ObjectRange = Class.create(); -Object.extend(ObjectRange.prototype, Enumerable); -Object.extend(ObjectRange.prototype, { - initialize: function(start, end, exclusive) { - this.start = start; - this.end = end; - this.exclusive = exclusive; - }, - - _each: function(iterator) { - var value = this.start; - while (this.include(value)) { - iterator(value); - value = value.succ(); - } - }, - - include: function(value) { - if (value < this.start) - return false; - if (this.exclusive) - return value < this.end; - return value <= this.end; - } -}); - -var $R = function(start, end, exclusive) { - return new ObjectRange(start, end, exclusive); -} - -var Ajax = { - getTransport: function() { - return Try.these( - function() {return new XMLHttpRequest()}, - function() {return new ActiveXObject('Msxml2.XMLHTTP')}, - function() {return new ActiveXObject('Microsoft.XMLHTTP')} - ) || false; - }, - - activeRequestCount: 0 -} - -Ajax.Responders = { - responders: [], - - _each: function(iterator) { - this.responders._each(iterator); - }, - - register: function(responder) { - if (!this.include(responder)) - this.responders.push(responder); - }, - - unregister: function(responder) { - this.responders = this.responders.without(responder); - }, - - dispatch: function(callback, request, transport, json) { - this.each(function(responder) { - if (typeof responder[callback] == 'function') { - try { - responder[callback].apply(responder, [request, transport, json]); - } catch (e) {} - } - }); - } -}; - -Object.extend(Ajax.Responders, Enumerable); - -Ajax.Responders.register({ - onCreate: function() { - Ajax.activeRequestCount++; - }, - onComplete: function() { - Ajax.activeRequestCount--; - } -}); - -Ajax.Base = function() {}; -Ajax.Base.prototype = { - setOptions: function(options) { - this.options = { - method: 'post', - asynchronous: true, - contentType: 'application/x-www-form-urlencoded', - encoding: 'UTF-8', - parameters: '' - } - Object.extend(this.options, options || {}); - - this.options.method = this.options.method.toLowerCase(); - if (typeof this.options.parameters == 'string') - this.options.parameters = this.options.parameters.toQueryParams(); - } -} - -Ajax.Request = Class.create(); -Ajax.Request.Events = - ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete']; - -Ajax.Request.prototype = Object.extend(new Ajax.Base(), { - _complete: false, - - initialize: function(url, options) { - this.transport = Ajax.getTransport(); - this.setOptions(options); - this.request(url); - }, - - request: function(url) { - this.url = url; - this.method = this.options.method; - var params = this.options.parameters; - - if (!['get', 'post'].include(this.method)) { - // simulate other verbs over post - params['_method'] = this.method; - this.method = 'post'; - } - - params = Hash.toQueryString(params); - if (params && /Konqueror|Safari|KHTML/.test(navigator.userAgent)) params += '&_=' - - // when GET, append parameters to URL - if (this.method == 'get' && params) - this.url += (this.url.indexOf('?') > -1 ? '&' : '?') + params; - - try { - Ajax.Responders.dispatch('onCreate', this, this.transport); - - this.transport.open(this.method.toUpperCase(), this.url, - this.options.asynchronous); - - if (this.options.asynchronous) - setTimeout(function() { this.respondToReadyState(1) }.bind(this), 10); - - this.transport.onreadystatechange = this.onStateChange.bind(this); - this.setRequestHeaders(); - - var body = this.method == 'post' ? (this.options.postBody || params) : null; - - this.transport.send(body); - - /* Force Firefox to handle ready state 4 for synchronous requests */ - if (!this.options.asynchronous && this.transport.overrideMimeType) - this.onStateChange(); - - } - catch (e) { - this.dispatchException(e); - } - }, - - onStateChange: function() { - var readyState = this.transport.readyState; - if (readyState > 1 && !((readyState == 4) && this._complete)) - this.respondToReadyState(this.transport.readyState); - }, - - setRequestHeaders: function() { - var headers = { - 'X-Requested-With': 'XMLHttpRequest', - 'X-Prototype-Version': Prototype.Version, - 'Accept': 'text/javascript, text/html, application/xml, text/xml, */*' - }; - - if (this.method == 'post') { - headers['Content-type'] = this.options.contentType + - (this.options.encoding ? '; charset=' + this.options.encoding : ''); - - /* Force "Connection: close" for older Mozilla browsers to work - * around a bug where XMLHttpRequest sends an incorrect - * Content-length header. See Mozilla Bugzilla #246651. - */ - if (this.transport.overrideMimeType && - (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005) - headers['Connection'] = 'close'; - } - - // user-defined headers - if (typeof this.options.requestHeaders == 'object') { - var extras = this.options.requestHeaders; - - if (typeof extras.push == 'function') - for (var i = 0, length = extras.length; i < length; i += 2) - headers[extras[i]] = extras[i+1]; - else - $H(extras).each(function(pair) { headers[pair.key] = pair.value }); - } - - for (var name in headers) - this.transport.setRequestHeader(name, headers[name]); - }, - - success: function() { - return !this.transport.status - || (this.transport.status >= 200 && this.transport.status < 300); - }, - - respondToReadyState: function(readyState) { - var state = Ajax.Request.Events[readyState]; - var transport = this.transport, json = this.evalJSON(); - - if (state == 'Complete') { - try { - this._complete = true; - (this.options['on' + this.transport.status] - || this.options['on' + (this.success() ? 'Success' : 'Failure')] - || Prototype.emptyFunction)(transport, json); - } catch (e) { - this.dispatchException(e); - } - - if ((this.getHeader('Content-type') || 'text/javascript').strip(). - match(/^(text|application)\/(x-)?(java|ecma)script(;.*)?$/i)) - this.evalResponse(); - } - - try { - (this.options['on' + state] || Prototype.emptyFunction)(transport, json); - Ajax.Responders.dispatch('on' + state, this, transport, json); - } catch (e) { - this.dispatchException(e); - } - - if (state == 'Complete') { - // avoid memory leak in MSIE: clean up - this.transport.onreadystatechange = Prototype.emptyFunction; - } - }, - - getHeader: function(name) { - try { - return this.transport.getResponseHeader(name); - } catch (e) { return null } - }, - - evalJSON: function() { - try { - var json = this.getHeader('X-JSON'); - return json ? eval('(' + json + ')') : null; - } catch (e) { return null } - }, - - evalResponse: function() { - try { - return eval(this.transport.responseText); - } catch (e) { - this.dispatchException(e); - } - }, - - dispatchException: function(exception) { - (this.options.onException || Prototype.emptyFunction)(this, exception); - Ajax.Responders.dispatch('onException', this, exception); - } -}); - -Ajax.Updater = Class.create(); - -Object.extend(Object.extend(Ajax.Updater.prototype, Ajax.Request.prototype), { - initialize: function(container, url, options) { - this.container = { - success: (container.success || container), - failure: (container.failure || (container.success ? null : container)) - } - - this.transport = Ajax.getTransport(); - this.setOptions(options); - - var onComplete = this.options.onComplete || Prototype.emptyFunction; - this.options.onComplete = (function(transport, param) { - this.updateContent(); - onComplete(transport, param); - }).bind(this); - - this.request(url); - }, - - updateContent: function() { - var receiver = this.container[this.success() ? 'success' : 'failure']; - var response = this.transport.responseText; - - if (!this.options.evalScripts) response = response.stripScripts(); - - if (receiver = $(receiver)) { - if (this.options.insertion) - new this.options.insertion(receiver, response); - else - receiver.update(response); - } - - if (this.success()) { - if (this.onComplete) - setTimeout(this.onComplete.bind(this), 10); - } - } -}); - -Ajax.PeriodicalUpdater = Class.create(); -Ajax.PeriodicalUpdater.prototype = Object.extend(new Ajax.Base(), { - initialize: function(container, url, options) { - this.setOptions(options); - this.onComplete = this.options.onComplete; - - this.frequency = (this.options.frequency || 2); - this.decay = (this.options.decay || 1); - - this.updater = {}; - this.container = container; - this.url = url; - - this.start(); - }, - - start: function() { - this.options.onComplete = this.updateComplete.bind(this); - this.onTimerEvent(); - }, - - stop: function() { - this.updater.options.onComplete = undefined; - clearTimeout(this.timer); - (this.onComplete || Prototype.emptyFunction).apply(this, arguments); - }, - - updateComplete: function(request) { - if (this.options.decay) { - this.decay = (request.responseText == this.lastText ? - this.decay * this.options.decay : 1); - - this.lastText = request.responseText; - } - this.timer = setTimeout(this.onTimerEvent.bind(this), - this.decay * this.frequency * 1000); - }, - - onTimerEvent: function() { - this.updater = new Ajax.Updater(this.container, this.url, this.options); - } -}); -function $(element) { - if (arguments.length > 1) { - for (var i = 0, elements = [], length = arguments.length; i < length; i++) - elements.push($(arguments[i])); - return elements; - } - if (typeof element == 'string') - element = document.getElementById(element); - return Element.extend(element); -} - -if (Prototype.BrowserFeatures.XPath) { - document._getElementsByXPath = function(expression, parentElement) { - var results = []; - var query = document.evaluate(expression, $(parentElement) || document, - null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); - for (var i = 0, length = query.snapshotLength; i < length; i++) - results.push(query.snapshotItem(i)); - return results; - }; -} - -document.getElementsByClassName = function(className, parentElement) { - if (Prototype.BrowserFeatures.XPath) { - var q = ".//*[contains(concat(' ', @class, ' '), ' " + className + " ')]"; - return document._getElementsByXPath(q, parentElement); - } else { - var children = ($(parentElement) || document.body).getElementsByTagName('*'); - var elements = [], child; - for (var i = 0, length = children.length; i < length; i++) { - child = children[i]; - if (Element.hasClassName(child, className)) - elements.push(Element.extend(child)); - } - return elements; - } -}; - -/*--------------------------------------------------------------------------*/ - -if (!window.Element) - var Element = new Object(); - -Element.extend = function(element) { - if (!element || _nativeExtensions || element.nodeType == 3) return element; - - if (!element._extended && element.tagName && element != window) { - var methods = Object.clone(Element.Methods), cache = Element.extend.cache; - - if (element.tagName == 'FORM') - Object.extend(methods, Form.Methods); - if (['INPUT', 'TEXTAREA', 'SELECT'].include(element.tagName)) - Object.extend(methods, Form.Element.Methods); - - Object.extend(methods, Element.Methods.Simulated); - - for (var property in methods) { - var value = methods[property]; - if (typeof value == 'function' && !(property in element)) - element[property] = cache.findOrStore(value); - } - } - - element._extended = true; - return element; -}; - -Element.extend.cache = { - findOrStore: function(value) { - return this[value] = this[value] || function() { - return value.apply(null, [this].concat($A(arguments))); - } - } -}; - -Element.Methods = { - visible: function(element) { - return $(element).style.display != 'none'; - }, - - toggle: function(element) { - element = $(element); - Element[Element.visible(element) ? 'hide' : 'show'](element); - return element; - }, - - hide: function(element) { - $(element).style.display = 'none'; - return element; - }, - - show: function(element) { - $(element).style.display = ''; - return element; - }, - - remove: function(element) { - element = $(element); - element.parentNode.removeChild(element); - return element; - }, - - update: function(element, html) { - html = typeof html == 'undefined' ? '' : html.toString(); - $(element).innerHTML = html.stripScripts(); - setTimeout(function() {html.evalScripts()}, 10); - return element; - }, - - replace: function(element, html) { - element = $(element); - html = typeof html == 'undefined' ? '' : html.toString(); - if (element.outerHTML) { - element.outerHTML = html.stripScripts(); - } else { - var range = element.ownerDocument.createRange(); - range.selectNodeContents(element); - element.parentNode.replaceChild( - range.createContextualFragment(html.stripScripts()), element); - } - setTimeout(function() {html.evalScripts()}, 10); - return element; - }, - - inspect: function(element) { - element = $(element); - var result = '<' + element.tagName.toLowerCase(); - $H({'id': 'id', 'className': 'class'}).each(function(pair) { - var property = pair.first(), attribute = pair.last(); - var value = (element[property] || '').toString(); - if (value) result += ' ' + attribute + '=' + value.inspect(true); - }); - return result + '>'; - }, - - recursivelyCollect: function(element, property) { - element = $(element); - var elements = []; - while (element = element[property]) - if (element.nodeType == 1) - elements.push(Element.extend(element)); - return elements; - }, - - ancestors: function(element) { - return $(element).recursivelyCollect('parentNode'); - }, - - descendants: function(element) { - return $A($(element).getElementsByTagName('*')); - }, - - immediateDescendants: function(element) { - if (!(element = $(element).firstChild)) return []; - while (element && element.nodeType != 1) element = element.nextSibling; - if (element) return [element].concat($(element).nextSiblings()); - return []; - }, - - previousSiblings: function(element) { - return $(element).recursivelyCollect('previousSibling'); - }, - - nextSiblings: function(element) { - return $(element).recursivelyCollect('nextSibling'); - }, - - siblings: function(element) { - element = $(element); - return element.previousSiblings().reverse().concat(element.nextSiblings()); - }, - - match: function(element, selector) { - if (typeof selector == 'string') - selector = new Selector(selector); - return selector.match($(element)); - }, - - up: function(element, expression, index) { - return Selector.findElement($(element).ancestors(), expression, index); - }, - - down: function(element, expression, index) { - return Selector.findElement($(element).descendants(), expression, index); - }, - - previous: function(element, expression, index) { - return Selector.findElement($(element).previousSiblings(), expression, index); - }, - - next: function(element, expression, index) { - return Selector.findElement($(element).nextSiblings(), expression, index); - }, - - getElementsBySelector: function() { - var args = $A(arguments), element = $(args.shift()); - return Selector.findChildElements(element, args); - }, - - getElementsByClassName: function(element, className) { - return document.getElementsByClassName(className, element); - }, - - readAttribute: function(element, name) { - element = $(element); - if (document.all && !window.opera) { - var t = Element._attributeTranslations; - if (t.values[name]) return t.values[name](element, name); - if (t.names[name]) name = t.names[name]; - var attribute = element.attributes[name]; - if(attribute) return attribute.nodeValue; - } - return element.getAttribute(name); - }, - - getHeight: function(element) { - return $(element).getDimensions().height; - }, - - getWidth: function(element) { - return $(element).getDimensions().width; - }, - - classNames: function(element) { - return new Element.ClassNames(element); - }, - - hasClassName: function(element, className) { - if (!(element = $(element))) return; - var elementClassName = element.className; - if (elementClassName.length == 0) return false; - if (elementClassName == className || - elementClassName.match(new RegExp("(^|\\s)" + className + "(\\s|$)"))) - return true; - return false; - }, - - addClassName: function(element, className) { - if (!(element = $(element))) return; - Element.classNames(element).add(className); - return element; - }, - - removeClassName: function(element, className) { - if (!(element = $(element))) return; - Element.classNames(element).remove(className); - return element; - }, - - toggleClassName: function(element, className) { - if (!(element = $(element))) return; - Element.classNames(element)[element.hasClassName(className) ? 'remove' : 'add'](className); - return element; - }, - - observe: function() { - Event.observe.apply(Event, arguments); - return $A(arguments).first(); - }, - - stopObserving: function() { - Event.stopObserving.apply(Event, arguments); - return $A(arguments).first(); - }, - - // removes whitespace-only text node children - cleanWhitespace: function(element) { - element = $(element); - var node = element.firstChild; - while (node) { - var nextNode = node.nextSibling; - if (node.nodeType == 3 && !/\S/.test(node.nodeValue)) - element.removeChild(node); - node = nextNode; - } - return element; - }, - - empty: function(element) { - return $(element).innerHTML.match(/^\s*$/); - }, - - descendantOf: function(element, ancestor) { - element = $(element), ancestor = $(ancestor); - while (element = element.parentNode) - if (element == ancestor) return true; - return false; - }, - - scrollTo: function(element) { - element = $(element); - var pos = Position.cumulativeOffset(element); - window.scrollTo(pos[0], pos[1]); - return element; - }, - - getStyle: function(element, style) { - element = $(element); - if (['float','cssFloat'].include(style)) - style = (typeof element.style.styleFloat != 'undefined' ? 'styleFloat' : 'cssFloat'); - style = style.camelize(); - var value = element.style[style]; - if (!value) { - if (document.defaultView && document.defaultView.getComputedStyle) { - var css = document.defaultView.getComputedStyle(element, null); - value = css ? css[style] : null; - } else if (element.currentStyle) { - value = element.currentStyle[style]; - } - } - - if((value == 'auto') && ['width','height'].include(style) && (element.getStyle('display') != 'none')) - value = element['offset'+style.capitalize()] + 'px'; - - if (window.opera && ['left', 'top', 'right', 'bottom'].include(style)) - if (Element.getStyle(element, 'position') == 'static') value = 'auto'; - if(style == 'opacity') { - if(value) return parseFloat(value); - if(value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/)) - if(value[1]) return parseFloat(value[1]) / 100; - return 1.0; - } - return value == 'auto' ? null : value; - }, - - setStyle: function(element, style) { - element = $(element); - for (var name in style) { - var value = style[name]; - if(name == 'opacity') { - if (value == 1) { - value = (/Gecko/.test(navigator.userAgent) && - !/Konqueror|Safari|KHTML/.test(navigator.userAgent)) ? 0.999999 : 1.0; - if(/MSIE/.test(navigator.userAgent) && !window.opera) - element.style.filter = element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,''); - } else if(value == '') { - if(/MSIE/.test(navigator.userAgent) && !window.opera) - element.style.filter = element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,''); - } else { - if(value < 0.00001) value = 0; - if(/MSIE/.test(navigator.userAgent) && !window.opera) - element.style.filter = element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,'') + - 'alpha(opacity='+value*100+')'; - } - } else if(['float','cssFloat'].include(name)) name = (typeof element.style.styleFloat != 'undefined') ? 'styleFloat' : 'cssFloat'; - element.style[name.camelize()] = value; - } - return element; - }, - - getDimensions: function(element) { - element = $(element); - var display = $(element).getStyle('display'); - if (display != 'none' && display != null) // Safari bug - return {width: element.offsetWidth, height: element.offsetHeight}; - - // All *Width and *Height properties give 0 on elements with display none, - // so enable the element temporarily - var els = element.style; - var originalVisibility = els.visibility; - var originalPosition = els.position; - var originalDisplay = els.display; - els.visibility = 'hidden'; - els.position = 'absolute'; - els.display = 'block'; - var originalWidth = element.clientWidth; - var originalHeight = element.clientHeight; - els.display = originalDisplay; - els.position = originalPosition; - els.visibility = originalVisibility; - return {width: originalWidth, height: originalHeight}; - }, - - makePositioned: function(element) { - element = $(element); - var pos = Element.getStyle(element, 'position'); - if (pos == 'static' || !pos) { - element._madePositioned = true; - element.style.position = 'relative'; - // Opera returns the offset relative to the positioning context, when an - // element is position relative but top and left have not been defined - if (window.opera) { - element.style.top = 0; - element.style.left = 0; - } - } - return element; - }, - - undoPositioned: function(element) { - element = $(element); - if (element._madePositioned) { - element._madePositioned = undefined; - element.style.position = - element.style.top = - element.style.left = - element.style.bottom = - element.style.right = ''; - } - return element; - }, - - makeClipping: function(element) { - element = $(element); - if (element._overflow) return element; - element._overflow = element.style.overflow || 'auto'; - if ((Element.getStyle(element, 'overflow') || 'visible') != 'hidden') - element.style.overflow = 'hidden'; - return element; - }, - - undoClipping: function(element) { - element = $(element); - if (!element._overflow) return element; - element.style.overflow = element._overflow == 'auto' ? '' : element._overflow; - element._overflow = null; - return element; - } -}; - -Object.extend(Element.Methods, {childOf: Element.Methods.descendantOf}); - -Element._attributeTranslations = {}; - -Element._attributeTranslations.names = { - colspan: "colSpan", - rowspan: "rowSpan", - valign: "vAlign", - datetime: "dateTime", - accesskey: "accessKey", - tabindex: "tabIndex", - enctype: "encType", - maxlength: "maxLength", - readonly: "readOnly", - longdesc: "longDesc" -}; - -Element._attributeTranslations.values = { - _getAttr: function(element, attribute) { - return element.getAttribute(attribute, 2); - }, - - _flag: function(element, attribute) { - return $(element).hasAttribute(attribute) ? attribute : null; - }, - - style: function(element) { - return element.style.cssText.toLowerCase(); - }, - - title: function(element) { - var node = element.getAttributeNode('title'); - return node.specified ? node.nodeValue : null; - } -}; - -Object.extend(Element._attributeTranslations.values, { - href: Element._attributeTranslations.values._getAttr, - src: Element._attributeTranslations.values._getAttr, - disabled: Element._attributeTranslations.values._flag, - checked: Element._attributeTranslations.values._flag, - readonly: Element._attributeTranslations.values._flag, - multiple: Element._attributeTranslations.values._flag -}); - -Element.Methods.Simulated = { - hasAttribute: function(element, attribute) { - var t = Element._attributeTranslations; - attribute = t.names[attribute] || attribute; - return $(element).getAttributeNode(attribute).specified; - } -}; - -// IE is missing .innerHTML support for TABLE-related elements -if (document.all && !window.opera){ - Element.Methods.update = function(element, html) { - element = $(element); - html = typeof html == 'undefined' ? '' : html.toString(); - var tagName = element.tagName.toUpperCase(); - if (['THEAD','TBODY','TR','TD'].include(tagName)) { - var div = document.createElement('div'); - switch (tagName) { - case 'THEAD': - case 'TBODY': - div.innerHTML = '' + html.stripScripts() + '
'; - depth = 2; - break; - case 'TR': - div.innerHTML = '' + html.stripScripts() + '
'; - depth = 3; - break; - case 'TD': - div.innerHTML = '
' + html.stripScripts() + '
'; - depth = 4; - } - $A(element.childNodes).each(function(node){ - element.removeChild(node) - }); - depth.times(function(){ div = div.firstChild }); - - $A(div.childNodes).each( - function(node){ element.appendChild(node) }); - } else { - element.innerHTML = html.stripScripts(); - } - setTimeout(function() {html.evalScripts()}, 10); - return element; - } -}; - -Object.extend(Element, Element.Methods); - -var _nativeExtensions = false; - -if(/Konqueror|Safari|KHTML/.test(navigator.userAgent)) - ['', 'Form', 'Input', 'TextArea', 'Select'].each(function(tag) { - var className = 'HTML' + tag + 'Element'; - if(window[className]) return; - var klass = window[className] = {}; - klass.prototype = document.createElement(tag ? tag.toLowerCase() : 'div').__proto__; - }); - -Element.addMethods = function(methods) { - Object.extend(Element.Methods, methods || {}); - - function copy(methods, destination, onlyIfAbsent) { - onlyIfAbsent = onlyIfAbsent || false; - var cache = Element.extend.cache; - for (var property in methods) { - var value = methods[property]; - if (!onlyIfAbsent || !(property in destination)) - destination[property] = cache.findOrStore(value); - } - } - - if (typeof HTMLElement != 'undefined') { - copy(Element.Methods, HTMLElement.prototype); - copy(Element.Methods.Simulated, HTMLElement.prototype, true); - copy(Form.Methods, HTMLFormElement.prototype); - [HTMLInputElement, HTMLTextAreaElement, HTMLSelectElement].each(function(klass) { - copy(Form.Element.Methods, klass.prototype); - }); - _nativeExtensions = true; - } -} - -var Toggle = new Object(); -Toggle.display = Element.toggle; - -/*--------------------------------------------------------------------------*/ - -Abstract.Insertion = function(adjacency) { - this.adjacency = adjacency; -} - -Abstract.Insertion.prototype = { - initialize: function(element, content) { - this.element = $(element); - this.content = content.stripScripts(); - - if (this.adjacency && this.element.insertAdjacentHTML) { - try { - this.element.insertAdjacentHTML(this.adjacency, this.content); - } catch (e) { - var tagName = this.element.tagName.toUpperCase(); - if (['TBODY', 'TR'].include(tagName)) { - this.insertContent(this.contentFromAnonymousTable()); - } else { - throw e; - } - } - } else { - this.range = this.element.ownerDocument.createRange(); - if (this.initializeRange) this.initializeRange(); - this.insertContent([this.range.createContextualFragment(this.content)]); - } - - setTimeout(function() {content.evalScripts()}, 10); - }, - - contentFromAnonymousTable: function() { - var div = document.createElement('div'); - div.innerHTML = '' + this.content + '
'; - return $A(div.childNodes[0].childNodes[0].childNodes); - } -} - -var Insertion = new Object(); - -Insertion.Before = Class.create(); -Insertion.Before.prototype = Object.extend(new Abstract.Insertion('beforeBegin'), { - initializeRange: function() { - this.range.setStartBefore(this.element); - }, - - insertContent: function(fragments) { - fragments.each((function(fragment) { - this.element.parentNode.insertBefore(fragment, this.element); - }).bind(this)); - } -}); - -Insertion.Top = Class.create(); -Insertion.Top.prototype = Object.extend(new Abstract.Insertion('afterBegin'), { - initializeRange: function() { - this.range.selectNodeContents(this.element); - this.range.collapse(true); - }, - - insertContent: function(fragments) { - fragments.reverse(false).each((function(fragment) { - this.element.insertBefore(fragment, this.element.firstChild); - }).bind(this)); - } -}); - -Insertion.Bottom = Class.create(); -Insertion.Bottom.prototype = Object.extend(new Abstract.Insertion('beforeEnd'), { - initializeRange: function() { - this.range.selectNodeContents(this.element); - this.range.collapse(this.element); - }, - - insertContent: function(fragments) { - fragments.each((function(fragment) { - this.element.appendChild(fragment); - }).bind(this)); - } -}); - -Insertion.After = Class.create(); -Insertion.After.prototype = Object.extend(new Abstract.Insertion('afterEnd'), { - initializeRange: function() { - this.range.setStartAfter(this.element); - }, - - insertContent: function(fragments) { - fragments.each((function(fragment) { - this.element.parentNode.insertBefore(fragment, - this.element.nextSibling); - }).bind(this)); - } -}); - -/*--------------------------------------------------------------------------*/ - -Element.ClassNames = Class.create(); -Element.ClassNames.prototype = { - initialize: function(element) { - this.element = $(element); - }, - - _each: function(iterator) { - this.element.className.split(/\s+/).select(function(name) { - return name.length > 0; - })._each(iterator); - }, - - set: function(className) { - this.element.className = className; - }, - - add: function(classNameToAdd) { - if (this.include(classNameToAdd)) return; - this.set($A(this).concat(classNameToAdd).join(' ')); - }, - - remove: function(classNameToRemove) { - if (!this.include(classNameToRemove)) return; - this.set($A(this).without(classNameToRemove).join(' ')); - }, - - toString: function() { - return $A(this).join(' '); - } -}; - -Object.extend(Element.ClassNames.prototype, Enumerable); -var Selector = Class.create(); -Selector.prototype = { - initialize: function(expression) { - this.params = {classNames: []}; - this.expression = expression.toString().strip(); - this.parseExpression(); - this.compileMatcher(); - }, - - parseExpression: function() { - function abort(message) { throw 'Parse error in selector: ' + message; } - - if (this.expression == '') abort('empty expression'); - - var params = this.params, expr = this.expression, match, modifier, clause, rest; - while (match = expr.match(/^(.*)\[([a-z0-9_:-]+?)(?:([~\|!]?=)(?:"([^"]*)"|([^\]\s]*)))?\]$/i)) { - params.attributes = params.attributes || []; - params.attributes.push({name: match[2], operator: match[3], value: match[4] || match[5] || ''}); - expr = match[1]; - } - - if (expr == '*') return this.params.wildcard = true; - - while (match = expr.match(/^([^a-z0-9_-])?([a-z0-9_-]+)(.*)/i)) { - modifier = match[1], clause = match[2], rest = match[3]; - switch (modifier) { - case '#': params.id = clause; break; - case '.': params.classNames.push(clause); break; - case '': - case undefined: params.tagName = clause.toUpperCase(); break; - default: abort(expr.inspect()); - } - expr = rest; - } - - if (expr.length > 0) abort(expr.inspect()); - }, - - buildMatchExpression: function() { - var params = this.params, conditions = [], clause; - - if (params.wildcard) - conditions.push('true'); - if (clause = params.id) - conditions.push('element.readAttribute("id") == ' + clause.inspect()); - if (clause = params.tagName) - conditions.push('element.tagName.toUpperCase() == ' + clause.inspect()); - if ((clause = params.classNames).length > 0) - for (var i = 0, length = clause.length; i < length; i++) - conditions.push('element.hasClassName(' + clause[i].inspect() + ')'); - if (clause = params.attributes) { - clause.each(function(attribute) { - var value = 'element.readAttribute(' + attribute.name.inspect() + ')'; - var splitValueBy = function(delimiter) { - return value + ' && ' + value + '.split(' + delimiter.inspect() + ')'; - } - - switch (attribute.operator) { - case '=': conditions.push(value + ' == ' + attribute.value.inspect()); break; - case '~=': conditions.push(splitValueBy(' ') + '.include(' + attribute.value.inspect() + ')'); break; - case '|=': conditions.push( - splitValueBy('-') + '.first().toUpperCase() == ' + attribute.value.toUpperCase().inspect() - ); break; - case '!=': conditions.push(value + ' != ' + attribute.value.inspect()); break; - case '': - case undefined: conditions.push('element.hasAttribute(' + attribute.name.inspect() + ')'); break; - default: throw 'Unknown operator ' + attribute.operator + ' in selector'; - } - }); - } - - return conditions.join(' && '); - }, - - compileMatcher: function() { - this.match = new Function('element', 'if (!element.tagName) return false; \ - element = $(element); \ - return ' + this.buildMatchExpression()); - }, - - findElements: function(scope) { - var element; - - if (element = $(this.params.id)) - if (this.match(element)) - if (!scope || Element.childOf(element, scope)) - return [element]; - - scope = (scope || document).getElementsByTagName(this.params.tagName || '*'); - - var results = []; - for (var i = 0, length = scope.length; i < length; i++) - if (this.match(element = scope[i])) - results.push(Element.extend(element)); - - return results; - }, - - toString: function() { - return this.expression; - } -} - -Object.extend(Selector, { - matchElements: function(elements, expression) { - var selector = new Selector(expression); - return elements.select(selector.match.bind(selector)).map(Element.extend); - }, - - findElement: function(elements, expression, index) { - if (typeof expression == 'number') index = expression, expression = false; - return Selector.matchElements(elements, expression || '*')[index || 0]; - }, - - findChildElements: function(element, expressions) { - return expressions.map(function(expression) { - return expression.match(/[^\s"]+(?:"[^"]*"[^\s"]+)*/g).inject([null], function(results, expr) { - var selector = new Selector(expr); - return results.inject([], function(elements, result) { - return elements.concat(selector.findElements(result || element)); - }); - }); - }).flatten(); - } -}); - -function $$() { - return Selector.findChildElements(document, $A(arguments)); -} -var Form = { - reset: function(form) { - $(form).reset(); - return form; - }, - - serializeElements: function(elements, getHash) { - var data = elements.inject({}, function(result, element) { - if (!element.disabled && element.name) { - var key = element.name, value = $(element).getValue(); - if (value != undefined) { - if (result[key]) { - if (result[key].constructor != Array) result[key] = [result[key]]; - result[key].push(value); - } - else result[key] = value; - } - } - return result; - }); - - return getHash ? data : Hash.toQueryString(data); - } -}; - -Form.Methods = { - serialize: function(form, getHash) { - return Form.serializeElements(Form.getElements(form), getHash); - }, - - getElements: function(form) { - return $A($(form).getElementsByTagName('*')).inject([], - function(elements, child) { - if (Form.Element.Serializers[child.tagName.toLowerCase()]) - elements.push(Element.extend(child)); - return elements; - } - ); - }, - - getInputs: function(form, typeName, name) { - form = $(form); - var inputs = form.getElementsByTagName('input'); - - if (!typeName && !name) return $A(inputs).map(Element.extend); - - for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) { - var input = inputs[i]; - if ((typeName && input.type != typeName) || (name && input.name != name)) - continue; - matchingInputs.push(Element.extend(input)); - } - - return matchingInputs; - }, - - disable: function(form) { - form = $(form); - form.getElements().each(function(element) { - element.blur(); - element.disabled = 'true'; - }); - return form; - }, - - enable: function(form) { - form = $(form); - form.getElements().each(function(element) { - element.disabled = ''; - }); - return form; - }, - - findFirstElement: function(form) { - return $(form).getElements().find(function(element) { - return element.type != 'hidden' && !element.disabled && - ['input', 'select', 'textarea'].include(element.tagName.toLowerCase()); - }); - }, - - focusFirstElement: function(form) { - form = $(form); - form.findFirstElement().activate(); - return form; - } -} - -Object.extend(Form, Form.Methods); - -/*--------------------------------------------------------------------------*/ - -Form.Element = { - focus: function(element) { - $(element).focus(); - return element; - }, - - select: function(element) { - $(element).select(); - return element; - } -} - -Form.Element.Methods = { - serialize: function(element) { - element = $(element); - if (!element.disabled && element.name) { - var value = element.getValue(); - if (value != undefined) { - var pair = {}; - pair[element.name] = value; - return Hash.toQueryString(pair); - } - } - return ''; - }, - - getValue: function(element) { - element = $(element); - var method = element.tagName.toLowerCase(); - return Form.Element.Serializers[method](element); - }, - - clear: function(element) { - $(element).value = ''; - return element; - }, - - present: function(element) { - return $(element).value != ''; - }, - - activate: function(element) { - element = $(element); - element.focus(); - if (element.select && ( element.tagName.toLowerCase() != 'input' || - !['button', 'reset', 'submit'].include(element.type) ) ) - element.select(); - return element; - }, - - disable: function(element) { - element = $(element); - element.disabled = true; - return element; - }, - - enable: function(element) { - element = $(element); - element.blur(); - element.disabled = false; - return element; - } -} - -Object.extend(Form.Element, Form.Element.Methods); -var Field = Form.Element; -var $F = Form.Element.getValue; - -/*--------------------------------------------------------------------------*/ - -Form.Element.Serializers = { - input: function(element) { - switch (element.type.toLowerCase()) { - case 'checkbox': - case 'radio': - return Form.Element.Serializers.inputSelector(element); - default: - return Form.Element.Serializers.textarea(element); - } - }, - - inputSelector: function(element) { - return element.checked ? element.value : null; - }, - - textarea: function(element) { - return element.value; - }, - - select: function(element) { - return this[element.type == 'select-one' ? - 'selectOne' : 'selectMany'](element); - }, - - selectOne: function(element) { - var index = element.selectedIndex; - return index >= 0 ? this.optionValue(element.options[index]) : null; - }, - - selectMany: function(element) { - var values, length = element.length; - if (!length) return null; - - for (var i = 0, values = []; i < length; i++) { - var opt = element.options[i]; - if (opt.selected) values.push(this.optionValue(opt)); - } - return values; - }, - - optionValue: function(opt) { - // extend element because hasAttribute may not be native - return Element.extend(opt).hasAttribute('value') ? opt.value : opt.text; - } -} - -/*--------------------------------------------------------------------------*/ - -Abstract.TimedObserver = function() {} -Abstract.TimedObserver.prototype = { - initialize: function(element, frequency, callback) { - this.frequency = frequency; - this.element = $(element); - this.callback = callback; - - this.lastValue = this.getValue(); - this.registerCallback(); - }, - - registerCallback: function() { - setInterval(this.onTimerEvent.bind(this), this.frequency * 1000); - }, - - onTimerEvent: function() { - var value = this.getValue(); - var changed = ('string' == typeof this.lastValue && 'string' == typeof value - ? this.lastValue != value : String(this.lastValue) != String(value)); - if (changed) { - this.callback(this.element, value); - this.lastValue = value; - } - } -} - -Form.Element.Observer = Class.create(); -Form.Element.Observer.prototype = Object.extend(new Abstract.TimedObserver(), { - getValue: function() { - return Form.Element.getValue(this.element); - } -}); - -Form.Observer = Class.create(); -Form.Observer.prototype = Object.extend(new Abstract.TimedObserver(), { - getValue: function() { - return Form.serialize(this.element); - } -}); - -/*--------------------------------------------------------------------------*/ - -Abstract.EventObserver = function() {} -Abstract.EventObserver.prototype = { - initialize: function(element, callback) { - this.element = $(element); - this.callback = callback; - - this.lastValue = this.getValue(); - if (this.element.tagName.toLowerCase() == 'form') - this.registerFormCallbacks(); - else - this.registerCallback(this.element); - }, - - onElementEvent: function() { - var value = this.getValue(); - if (this.lastValue != value) { - this.callback(this.element, value); - this.lastValue = value; - } - }, - - registerFormCallbacks: function() { - Form.getElements(this.element).each(this.registerCallback.bind(this)); - }, - - registerCallback: function(element) { - if (element.type) { - switch (element.type.toLowerCase()) { - case 'checkbox': - case 'radio': - Event.observe(element, 'click', this.onElementEvent.bind(this)); - break; - default: - Event.observe(element, 'change', this.onElementEvent.bind(this)); - break; - } - } - } -} - -Form.Element.EventObserver = Class.create(); -Form.Element.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), { - getValue: function() { - return Form.Element.getValue(this.element); - } -}); - -Form.EventObserver = Class.create(); -Form.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), { - getValue: function() { - return Form.serialize(this.element); - } -}); -if (!window.Event) { - var Event = new Object(); -} - -Object.extend(Event, { - KEY_BACKSPACE: 8, - KEY_TAB: 9, - KEY_RETURN: 13, - KEY_ESC: 27, - KEY_LEFT: 37, - KEY_UP: 38, - KEY_RIGHT: 39, - KEY_DOWN: 40, - KEY_DELETE: 46, - KEY_HOME: 36, - KEY_END: 35, - KEY_PAGEUP: 33, - KEY_PAGEDOWN: 34, - - element: function(event) { - return event.target || event.srcElement; - }, - - isLeftClick: function(event) { - return (((event.which) && (event.which == 1)) || - ((event.button) && (event.button == 1))); - }, - - pointerX: function(event) { - return event.pageX || (event.clientX + - (document.documentElement.scrollLeft || document.body.scrollLeft)); - }, - - pointerY: function(event) { - return event.pageY || (event.clientY + - (document.documentElement.scrollTop || document.body.scrollTop)); - }, - - stop: function(event) { - if (event.preventDefault) { - event.preventDefault(); - event.stopPropagation(); - } else { - event.returnValue = false; - event.cancelBubble = true; - } - }, - - // find the first node with the given tagName, starting from the - // node the event was triggered on; traverses the DOM upwards - findElement: function(event, tagName) { - var element = Event.element(event); - while (element.parentNode && (!element.tagName || - (element.tagName.toUpperCase() != tagName.toUpperCase()))) - element = element.parentNode; - return element; - }, - - observers: false, - - _observeAndCache: function(element, name, observer, useCapture) { - if (!this.observers) this.observers = []; - if (element.addEventListener) { - this.observers.push([element, name, observer, useCapture]); - element.addEventListener(name, observer, useCapture); - } else if (element.attachEvent) { - this.observers.push([element, name, observer, useCapture]); - element.attachEvent('on' + name, observer); - } - }, - - unloadCache: function() { - if (!Event.observers) return; - for (var i = 0, length = Event.observers.length; i < length; i++) { - Event.stopObserving.apply(this, Event.observers[i]); - Event.observers[i][0] = null; - } - Event.observers = false; - }, - - observe: function(element, name, observer, useCapture) { - element = $(element); - useCapture = useCapture || false; - - if (name == 'keypress' && - (navigator.appVersion.match(/Konqueror|Safari|KHTML/) - || element.attachEvent)) - name = 'keydown'; - - Event._observeAndCache(element, name, observer, useCapture); - }, - - stopObserving: function(element, name, observer, useCapture) { - element = $(element); - useCapture = useCapture || false; - - if (name == 'keypress' && - (navigator.appVersion.match(/Konqueror|Safari|KHTML/) - || element.detachEvent)) - name = 'keydown'; - - if (element.removeEventListener) { - element.removeEventListener(name, observer, useCapture); - } else if (element.detachEvent) { - try { - element.detachEvent('on' + name, observer); - } catch (e) {} - } - } -}); - -/* prevent memory leaks in IE */ -if (navigator.appVersion.match(/\bMSIE\b/)) - Event.observe(window, 'unload', Event.unloadCache, false); -var Position = { - // set to true if needed, warning: firefox performance problems - // NOT neeeded for page scrolling, only if draggable contained in - // scrollable elements - includeScrollOffsets: false, - - // must be called before calling withinIncludingScrolloffset, every time the - // page is scrolled - prepare: function() { - this.deltaX = window.pageXOffset - || document.documentElement.scrollLeft - || document.body.scrollLeft - || 0; - this.deltaY = window.pageYOffset - || document.documentElement.scrollTop - || document.body.scrollTop - || 0; - }, - - realOffset: function(element) { - var valueT = 0, valueL = 0; - do { - valueT += element.scrollTop || 0; - valueL += element.scrollLeft || 0; - element = element.parentNode; - } while (element); - return [valueL, valueT]; - }, - - cumulativeOffset: function(element) { - var valueT = 0, valueL = 0; - do { - valueT += element.offsetTop || 0; - valueL += element.offsetLeft || 0; - element = element.offsetParent; - } while (element); - return [valueL, valueT]; - }, - - positionedOffset: function(element) { - var valueT = 0, valueL = 0; - do { - valueT += element.offsetTop || 0; - valueL += element.offsetLeft || 0; - element = element.offsetParent; - if (element) { - if(element.tagName=='BODY') break; - var p = Element.getStyle(element, 'position'); - if (p == 'relative' || p == 'absolute') break; - } - } while (element); - return [valueL, valueT]; - }, - - offsetParent: function(element) { - if (element.offsetParent) return element.offsetParent; - if (element == document.body) return element; - - while ((element = element.parentNode) && element != document.body) - if (Element.getStyle(element, 'position') != 'static') - return element; - - return document.body; - }, - - // caches x/y coordinate pair to use with overlap - within: function(element, x, y) { - if (this.includeScrollOffsets) - return this.withinIncludingScrolloffsets(element, x, y); - this.xcomp = x; - this.ycomp = y; - this.offset = this.cumulativeOffset(element); - - return (y >= this.offset[1] && - y < this.offset[1] + element.offsetHeight && - x >= this.offset[0] && - x < this.offset[0] + element.offsetWidth); - }, - - withinIncludingScrolloffsets: function(element, x, y) { - var offsetcache = this.realOffset(element); - - this.xcomp = x + offsetcache[0] - this.deltaX; - this.ycomp = y + offsetcache[1] - this.deltaY; - this.offset = this.cumulativeOffset(element); - - return (this.ycomp >= this.offset[1] && - this.ycomp < this.offset[1] + element.offsetHeight && - this.xcomp >= this.offset[0] && - this.xcomp < this.offset[0] + element.offsetWidth); - }, - - // within must be called directly before - overlap: function(mode, element) { - if (!mode) return 0; - if (mode == 'vertical') - return ((this.offset[1] + element.offsetHeight) - this.ycomp) / - element.offsetHeight; - if (mode == 'horizontal') - return ((this.offset[0] + element.offsetWidth) - this.xcomp) / - element.offsetWidth; - }, - - page: function(forElement) { - var valueT = 0, valueL = 0; - - var element = forElement; - do { - valueT += element.offsetTop || 0; - valueL += element.offsetLeft || 0; - - // Safari fix - if (element.offsetParent==document.body) - if (Element.getStyle(element,'position')=='absolute') break; - - } while (element = element.offsetParent); - - element = forElement; - do { - if (!window.opera || element.tagName=='BODY') { - valueT -= element.scrollTop || 0; - valueL -= element.scrollLeft || 0; - } - } while (element = element.parentNode); - - return [valueL, valueT]; - }, - - clone: function(source, target) { - var options = Object.extend({ - setLeft: true, - setTop: true, - setWidth: true, - setHeight: true, - offsetTop: 0, - offsetLeft: 0 - }, arguments[2] || {}) - - // find page position of source - source = $(source); - var p = Position.page(source); - - // find coordinate system to use - target = $(target); - var delta = [0, 0]; - var parent = null; - // delta [0,0] will do fine with position: fixed elements, - // position:absolute needs offsetParent deltas - if (Element.getStyle(target,'position') == 'absolute') { - parent = Position.offsetParent(target); - delta = Position.page(parent); - } - - // correct by body offsets (fixes Safari) - if (parent == document.body) { - delta[0] -= document.body.offsetLeft; - delta[1] -= document.body.offsetTop; - } - - // set position - if(options.setLeft) target.style.left = (p[0] - delta[0] + options.offsetLeft) + 'px'; - if(options.setTop) target.style.top = (p[1] - delta[1] + options.offsetTop) + 'px'; - if(options.setWidth) target.style.width = source.offsetWidth + 'px'; - if(options.setHeight) target.style.height = source.offsetHeight + 'px'; - }, - - absolutize: function(element) { - element = $(element); - if (element.style.position == 'absolute') return; - Position.prepare(); - - var offsets = Position.positionedOffset(element); - var top = offsets[1]; - var left = offsets[0]; - var width = element.clientWidth; - var height = element.clientHeight; - - element._originalLeft = left - parseFloat(element.style.left || 0); - element._originalTop = top - parseFloat(element.style.top || 0); - element._originalWidth = element.style.width; - element._originalHeight = element.style.height; - - element.style.position = 'absolute'; - element.style.top = top + 'px'; - element.style.left = left + 'px'; - element.style.width = width + 'px'; - element.style.height = height + 'px'; - }, - - relativize: function(element) { - element = $(element); - if (element.style.position == 'relative') return; - Position.prepare(); - - element.style.position = 'relative'; - var top = parseFloat(element.style.top || 0) - (element._originalTop || 0); - var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0); - - element.style.top = top + 'px'; - element.style.left = left + 'px'; - element.style.height = element._originalHeight; - element.style.width = element._originalWidth; - } -} - -// Safari returns margins on body which is incorrect if the child is absolutely -// positioned. For performance reasons, redefine Position.cumulativeOffset for -// KHTML/WebKit only. -if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) { - Position.cumulativeOffset = function(element) { - var valueT = 0, valueL = 0; - do { - valueT += element.offsetTop || 0; - valueL += element.offsetLeft || 0; - if (element.offsetParent == document.body) - if (Element.getStyle(element, 'position') == 'absolute') break; - - element = element.offsetParent; - } while (element); - - return [valueL, valueT]; - } -} - -Element.addMethods(); - - -// ------------------------------------------------------------------------ -// ------------------------------------------------------------------------ - -// The rest of this file is the actual ray tracer written by Adam -// Burmister. It's a concatenation of the following files: -// -// flog/color.js -// flog/light.js -// flog/vector.js -// flog/ray.js -// flog/scene.js -// flog/material/basematerial.js -// flog/material/solid.js -// flog/material/chessboard.js -// flog/shape/baseshape.js -// flog/shape/sphere.js -// flog/shape/plane.js -// flog/intersectioninfo.js -// flog/camera.js -// flog/background.js -// flog/engine.js - - -/* Fake a Flog.* namespace */ -if(typeof(Flog) == 'undefined') var Flog = {}; -if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {}; - -Flog.RayTracer.Color = Class.create(); - -Flog.RayTracer.Color.prototype = { - red : 0.0, - green : 0.0, - blue : 0.0, - - initialize : function(r, g, b) { - if(!r) r = 0.0; - if(!g) g = 0.0; - if(!b) b = 0.0; - - this.red = r; - this.green = g; - this.blue = b; - }, - - add : function(c1, c2){ - var result = new Flog.RayTracer.Color(0,0,0); - - result.red = c1.red + c2.red; - result.green = c1.green + c2.green; - result.blue = c1.blue + c2.blue; - - return result; - }, - - addScalar: function(c1, s){ - var result = new Flog.RayTracer.Color(0,0,0); - - result.red = c1.red + s; - result.green = c1.green + s; - result.blue = c1.blue + s; - - result.limit(); - - return result; - }, - - subtract: function(c1, c2){ - var result = new Flog.RayTracer.Color(0,0,0); - - result.red = c1.red - c2.red; - result.green = c1.green - c2.green; - result.blue = c1.blue - c2.blue; - - return result; - }, - - multiply : function(c1, c2) { - var result = new Flog.RayTracer.Color(0,0,0); - - result.red = c1.red * c2.red; - result.green = c1.green * c2.green; - result.blue = c1.blue * c2.blue; - - return result; - }, - - multiplyScalar : function(c1, f) { - var result = new Flog.RayTracer.Color(0,0,0); - - result.red = c1.red * f; - result.green = c1.green * f; - result.blue = c1.blue * f; - - return result; - }, - - divideFactor : function(c1, f) { - var result = new Flog.RayTracer.Color(0,0,0); - - result.red = c1.red / f; - result.green = c1.green / f; - result.blue = c1.blue / f; - - return result; - }, - - limit: function(){ - this.red = (this.red > 0.0) ? ( (this.red > 1.0) ? 1.0 : this.red ) : 0.0; - this.green = (this.green > 0.0) ? ( (this.green > 1.0) ? 1.0 : this.green ) : 0.0; - this.blue = (this.blue > 0.0) ? ( (this.blue > 1.0) ? 1.0 : this.blue ) : 0.0; - }, - - distance : function(color) { - var d = Math.abs(this.red - color.red) + Math.abs(this.green - color.green) + Math.abs(this.blue - color.blue); - return d; - }, - - blend: function(c1, c2, w){ - var result = new Flog.RayTracer.Color(0,0,0); - result = Flog.RayTracer.Color.prototype.add( - Flog.RayTracer.Color.prototype.multiplyScalar(c1, 1 - w), - Flog.RayTracer.Color.prototype.multiplyScalar(c2, w) - ); - return result; - }, - - brightness : function() { - var r = Math.floor(this.red*255); - var g = Math.floor(this.green*255); - var b = Math.floor(this.blue*255); - return (r * 77 + g * 150 + b * 29) >> 8; - }, - - toString : function () { - var r = Math.floor(this.red*255); - var g = Math.floor(this.green*255); - var b = Math.floor(this.blue*255); - - return "rgb("+ r +","+ g +","+ b +")"; - } -} -/* Fake a Flog.* namespace */ -if(typeof(Flog) == 'undefined') var Flog = {}; -if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {}; - -Flog.RayTracer.Light = Class.create(); - -Flog.RayTracer.Light.prototype = { - position: null, - color: null, - intensity: 10.0, - - initialize : function(pos, color, intensity) { - this.position = pos; - this.color = color; - this.intensity = (intensity ? intensity : 10.0); - }, - - getIntensity: function(distance){ - if(distance >= intensity) return 0; - - return Math.pow((intensity - distance) / strength, 0.2); - }, - - toString : function () { - return 'Light [' + this.position.x + ',' + this.position.y + ',' + this.position.z + ']'; - } -} -/* Fake a Flog.* namespace */ -if(typeof(Flog) == 'undefined') var Flog = {}; -if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {}; - -Flog.RayTracer.Vector = Class.create(); - -Flog.RayTracer.Vector.prototype = { - x : 0.0, - y : 0.0, - z : 0.0, - - initialize : function(x, y, z) { - this.x = (x ? x : 0); - this.y = (y ? y : 0); - this.z = (z ? z : 0); - }, - - copy: function(vector){ - this.x = vector.x; - this.y = vector.y; - this.z = vector.z; - }, - - normalize : function() { - var m = this.magnitude(); - return new Flog.RayTracer.Vector(this.x / m, this.y / m, this.z / m); - }, - - magnitude : function() { - return Math.sqrt((this.x * this.x) + (this.y * this.y) + (this.z * this.z)); - }, - - cross : function(w) { - return new Flog.RayTracer.Vector( - -this.z * w.y + this.y * w.z, - this.z * w.x - this.x * w.z, - -this.y * w.x + this.x * w.y); - }, - - dot : function(w) { - return this.x * w.x + this.y * w.y + this.z * w.z; - }, - - add : function(v, w) { - return new Flog.RayTracer.Vector(w.x + v.x, w.y + v.y, w.z + v.z); - }, - - subtract : function(v, w) { - if(!w || !v) throw 'Vectors must be defined [' + v + ',' + w + ']'; - return new Flog.RayTracer.Vector(v.x - w.x, v.y - w.y, v.z - w.z); - }, - - multiplyVector : function(v, w) { - return new Flog.RayTracer.Vector(v.x * w.x, v.y * w.y, v.z * w.z); - }, - - multiplyScalar : function(v, w) { - return new Flog.RayTracer.Vector(v.x * w, v.y * w, v.z * w); - }, - - toString : function () { - return 'Vector [' + this.x + ',' + this.y + ',' + this.z + ']'; - } -} -/* Fake a Flog.* namespace */ -if(typeof(Flog) == 'undefined') var Flog = {}; -if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {}; - -Flog.RayTracer.Ray = Class.create(); - -Flog.RayTracer.Ray.prototype = { - position : null, - direction : null, - initialize : function(pos, dir) { - this.position = pos; - this.direction = dir; - }, - - toString : function () { - return 'Ray [' + this.position + ',' + this.direction + ']'; - } -} -/* Fake a Flog.* namespace */ -if(typeof(Flog) == 'undefined') var Flog = {}; -if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {}; - -Flog.RayTracer.Scene = Class.create(); - -Flog.RayTracer.Scene.prototype = { - camera : null, - shapes : [], - lights : [], - background : null, - - initialize : function() { - this.camera = new Flog.RayTracer.Camera( - new Flog.RayTracer.Vector(0,0,-5), - new Flog.RayTracer.Vector(0,0,1), - new Flog.RayTracer.Vector(0,1,0) - ); - this.shapes = new Array(); - this.lights = new Array(); - this.background = new Flog.RayTracer.Background(new Flog.RayTracer.Color(0,0,0.5), 0.2); - } -} -/* Fake a Flog.* namespace */ -if(typeof(Flog) == 'undefined') var Flog = {}; -if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {}; -if(typeof(Flog.RayTracer.Material) == 'undefined') Flog.RayTracer.Material = {}; - -Flog.RayTracer.Material.BaseMaterial = Class.create(); - -Flog.RayTracer.Material.BaseMaterial.prototype = { - - gloss: 2.0, // [0...infinity] 0 = matt - transparency: 0.0, // 0=opaque - reflection: 0.0, // [0...infinity] 0 = no reflection - refraction: 0.50, - hasTexture: false, - - initialize : function() { - - }, - - getColor: function(u, v){ - - }, - - wrapUp: function(t){ - t = t % 2.0; - if(t < -1) t += 2.0; - if(t >= 1) t -= 2.0; - return t; - }, - - toString : function () { - return 'Material [gloss=' + this.gloss + ', transparency=' + this.transparency + ', hasTexture=' + this.hasTexture +']'; - } -} -/* Fake a Flog.* namespace */ -if(typeof(Flog) == 'undefined') var Flog = {}; -if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {}; - -Flog.RayTracer.Material.Solid = Class.create(); - -Flog.RayTracer.Material.Solid.prototype = Object.extend( - new Flog.RayTracer.Material.BaseMaterial(), { - initialize : function(color, reflection, refraction, transparency, gloss) { - this.color = color; - this.reflection = reflection; - this.transparency = transparency; - this.gloss = gloss; - this.hasTexture = false; - }, - - getColor: function(u, v){ - return this.color; - }, - - toString : function () { - return 'SolidMaterial [gloss=' + this.gloss + ', transparency=' + this.transparency + ', hasTexture=' + this.hasTexture +']'; - } - } -); -/* Fake a Flog.* namespace */ -if(typeof(Flog) == 'undefined') var Flog = {}; -if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {}; - -Flog.RayTracer.Material.Chessboard = Class.create(); - -Flog.RayTracer.Material.Chessboard.prototype = Object.extend( - new Flog.RayTracer.Material.BaseMaterial(), { - colorEven: null, - colorOdd: null, - density: 0.5, - - initialize : function(colorEven, colorOdd, reflection, transparency, gloss, density) { - this.colorEven = colorEven; - this.colorOdd = colorOdd; - this.reflection = reflection; - this.transparency = transparency; - this.gloss = gloss; - this.density = density; - this.hasTexture = true; - }, - - getColor: function(u, v){ - var t = this.wrapUp(u * this.density) * this.wrapUp(v * this.density); - - if(t < 0.0) - return this.colorEven; - else - return this.colorOdd; - }, - - toString : function () { - return 'ChessMaterial [gloss=' + this.gloss + ', transparency=' + this.transparency + ', hasTexture=' + this.hasTexture +']'; - } - } -); -/* Fake a Flog.* namespace */ -if(typeof(Flog) == 'undefined') var Flog = {}; -if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {}; -if(typeof(Flog.RayTracer.Shape) == 'undefined') Flog.RayTracer.Shape = {}; - -Flog.RayTracer.Shape.BaseShape = Class.create(); - -Flog.RayTracer.Shape.BaseShape.prototype = { - position: null, - material: null, - - initialize : function() { - this.position = new Vector(0,0,0); - this.material = new Flog.RayTracer.Material.SolidMaterial( - new Flog.RayTracer.Color(1,0,1), - 0, - 0, - 0 - ); - }, - - toString : function () { - return 'Material [gloss=' + this.gloss + ', transparency=' + this.transparency + ', hasTexture=' + this.hasTexture +']'; - } -} -/* Fake a Flog.* namespace */ -if(typeof(Flog) == 'undefined') var Flog = {}; -if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {}; -if(typeof(Flog.RayTracer.Shape) == 'undefined') Flog.RayTracer.Shape = {}; - -Flog.RayTracer.Shape.Sphere = Class.create(); - -Flog.RayTracer.Shape.Sphere.prototype = { - initialize : function(pos, radius, material) { - this.radius = radius; - this.position = pos; - this.material = material; - }, - - intersect: function(ray){ - var info = new Flog.RayTracer.IntersectionInfo(); - info.shape = this; - - var dst = Flog.RayTracer.Vector.prototype.subtract(ray.position, this.position); - - var B = dst.dot(ray.direction); - var C = dst.dot(dst) - (this.radius * this.radius); - var D = (B * B) - C; - - if(D > 0){ // intersection! - info.isHit = true; - info.distance = (-B) - Math.sqrt(D); - info.position = Flog.RayTracer.Vector.prototype.add( - ray.position, - Flog.RayTracer.Vector.prototype.multiplyScalar( - ray.direction, - info.distance - ) - ); - info.normal = Flog.RayTracer.Vector.prototype.subtract( - info.position, - this.position - ).normalize(); - - info.color = this.material.getColor(0,0); - } else { - info.isHit = false; - } - return info; - }, - - toString : function () { - return 'Sphere [position=' + this.position + ', radius=' + this.radius + ']'; - } -} -/* Fake a Flog.* namespace */ -if(typeof(Flog) == 'undefined') var Flog = {}; -if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {}; -if(typeof(Flog.RayTracer.Shape) == 'undefined') Flog.RayTracer.Shape = {}; - -Flog.RayTracer.Shape.Plane = Class.create(); - -Flog.RayTracer.Shape.Plane.prototype = { - d: 0.0, - - initialize : function(pos, d, material) { - this.position = pos; - this.d = d; - this.material = material; - }, - - intersect: function(ray){ - var info = new Flog.RayTracer.IntersectionInfo(); - - var Vd = this.position.dot(ray.direction); - if(Vd == 0) return info; // no intersection - - var t = -(this.position.dot(ray.position) + this.d) / Vd; - if(t <= 0) return info; - - info.shape = this; - info.isHit = true; - info.position = Flog.RayTracer.Vector.prototype.add( - ray.position, - Flog.RayTracer.Vector.prototype.multiplyScalar( - ray.direction, - t - ) - ); - info.normal = this.position; - info.distance = t; - - if(this.material.hasTexture){ - var vU = new Flog.RayTracer.Vector(this.position.y, this.position.z, -this.position.x); - var vV = vU.cross(this.position); - var u = info.position.dot(vU); - var v = info.position.dot(vV); - info.color = this.material.getColor(u,v); - } else { - info.color = this.material.getColor(0,0); - } - - return info; - }, - - toString : function () { - return 'Plane [' + this.position + ', d=' + this.d + ']'; - } -} -/* Fake a Flog.* namespace */ -if(typeof(Flog) == 'undefined') var Flog = {}; -if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {}; - -Flog.RayTracer.IntersectionInfo = Class.create(); - -Flog.RayTracer.IntersectionInfo.prototype = { - isHit: false, - hitCount: 0, - shape: null, - position: null, - normal: null, - color: null, - distance: null, - - initialize : function() { - this.color = new Flog.RayTracer.Color(0,0,0); - }, - - toString : function () { - return 'Intersection [' + this.position + ']'; - } -} -/* Fake a Flog.* namespace */ -if(typeof(Flog) == 'undefined') var Flog = {}; -if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {}; - -Flog.RayTracer.Camera = Class.create(); - -Flog.RayTracer.Camera.prototype = { - position: null, - lookAt: null, - equator: null, - up: null, - screen: null, - - initialize : function(pos, lookAt, up) { - this.position = pos; - this.lookAt = lookAt; - this.up = up; - this.equator = lookAt.normalize().cross(this.up); - this.screen = Flog.RayTracer.Vector.prototype.add(this.position, this.lookAt); - }, - - getRay: function(vx, vy){ - var pos = Flog.RayTracer.Vector.prototype.subtract( - this.screen, - Flog.RayTracer.Vector.prototype.subtract( - Flog.RayTracer.Vector.prototype.multiplyScalar(this.equator, vx), - Flog.RayTracer.Vector.prototype.multiplyScalar(this.up, vy) - ) - ); - pos.y = pos.y * -1; - var dir = Flog.RayTracer.Vector.prototype.subtract( - pos, - this.position - ); - - var ray = new Flog.RayTracer.Ray(pos, dir.normalize()); - - return ray; - }, - - toString : function () { - return 'Ray []'; - } -} -/* Fake a Flog.* namespace */ -if(typeof(Flog) == 'undefined') var Flog = {}; -if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {}; - -Flog.RayTracer.Background = Class.create(); - -Flog.RayTracer.Background.prototype = { - color : null, - ambience : 0.0, - - initialize : function(color, ambience) { - this.color = color; - this.ambience = ambience; - } -} -/* Fake a Flog.* namespace */ -if(typeof(Flog) == 'undefined') var Flog = {}; -if(typeof(Flog.RayTracer) == 'undefined') Flog.RayTracer = {}; - -Flog.RayTracer.Engine = Class.create(); - -Flog.RayTracer.Engine.prototype = { - canvas: null, /* 2d context we can render to */ - - initialize: function(options){ - this.options = Object.extend({ - canvasHeight: 100, - canvasWidth: 100, - pixelWidth: 2, - pixelHeight: 2, - renderDiffuse: false, - renderShadows: false, - renderHighlights: false, - renderReflections: false, - rayDepth: 2 - }, options || {}); - - this.options.canvasHeight /= this.options.pixelHeight; - this.options.canvasWidth /= this.options.pixelWidth; - - /* TODO: dynamically include other scripts */ - }, - - setPixel: function(x, y, color){ - var pxW, pxH; - pxW = this.options.pixelWidth; - pxH = this.options.pixelHeight; - - if (this.canvas) { - this.canvas.fillStyle = color.toString(); - this.canvas.fillRect (x * pxW, y * pxH, pxW, pxH); - } else { - if (x === y) { - checkNumber += color.brightness(); - } - // print(x * pxW, y * pxH, pxW, pxH); - } - }, - - renderScene: function(scene, canvas){ - checkNumber = 0; - /* Get canvas */ - if (canvas) { - this.canvas = canvas.getContext("2d"); - } else { - this.canvas = null; - } - - var canvasHeight = this.options.canvasHeight; - var canvasWidth = this.options.canvasWidth; - - for(var y=0; y < canvasHeight; y++){ - for(var x=0; x < canvasWidth; x++){ - var yp = y * 1.0 / canvasHeight * 2 - 1; - var xp = x * 1.0 / canvasWidth * 2 - 1; - - var ray = scene.camera.getRay(xp, yp); - - var color = this.getPixelColor(ray, scene); - - this.setPixel(x, y, color); - } - } - if (checkNumber !== 2321) { - throw new Error("Scene rendered incorrectly"); - } - }, - - getPixelColor: function(ray, scene){ - var info = this.testIntersection(ray, scene, null); - if(info.isHit){ - var color = this.rayTrace(info, ray, scene, 0); - return color; - } - return scene.background.color; - }, - - testIntersection: function(ray, scene, exclude){ - var hits = 0; - var best = new Flog.RayTracer.IntersectionInfo(); - best.distance = 2000; - - for(var i=0; i= 0 && info.distance < best.distance){ - best = info; - hits++; - } - } - } - best.hitCount = hits; - return best; - }, - - getReflectionRay: function(P,N,V){ - var c1 = -N.dot(V); - var R1 = Flog.RayTracer.Vector.prototype.add( - Flog.RayTracer.Vector.prototype.multiplyScalar(N, 2*c1), - V - ); - return new Flog.RayTracer.Ray(P, R1); - }, - - rayTrace: function(info, ray, scene, depth){ - // Calc ambient - var color = Flog.RayTracer.Color.prototype.multiplyScalar(info.color, scene.background.ambience); - var oldColor = color; - var shininess = Math.pow(10, info.shape.material.gloss + 1); - - for(var i=0; i 0.0){ - color = Flog.RayTracer.Color.prototype.add( - color, - Flog.RayTracer.Color.prototype.multiply( - info.color, - Flog.RayTracer.Color.prototype.multiplyScalar( - light.color, - L - ) - ) - ); - } - } - - // The greater the depth the more accurate the colours, but - // this is exponentially (!) expensive - if(depth <= this.options.rayDepth){ - // calculate reflection ray - if(this.options.renderReflections && info.shape.material.reflection > 0) - { - var reflectionRay = this.getReflectionRay(info.position, info.normal, ray.direction); - var refl = this.testIntersection(reflectionRay, scene, info.shape); - - if (refl.isHit && refl.distance > 0){ - refl.color = this.rayTrace(refl, reflectionRay, scene, depth + 1); - } else { - refl.color = scene.background.color; - } - - color = Flog.RayTracer.Color.prototype.blend( - color, - refl.color, - info.shape.material.reflection - ); - } - - // Refraction - /* TODO */ - } - - /* Render shadows and highlights */ - - var shadowInfo = new Flog.RayTracer.IntersectionInfo(); - - if(this.options.renderShadows){ - var shadowRay = new Flog.RayTracer.Ray(info.position, v); - - shadowInfo = this.testIntersection(shadowRay, scene, info.shape); - if(shadowInfo.isHit && shadowInfo.shape != info.shape /*&& shadowInfo.shape.type != 'PLANE'*/){ - var vA = Flog.RayTracer.Color.prototype.multiplyScalar(color, 0.5); - var dB = (0.5 * Math.pow(shadowInfo.shape.material.transparency, 0.5)); - color = Flog.RayTracer.Color.prototype.addScalar(vA,dB); - } - } - - // Phong specular highlights - if(this.options.renderHighlights && !shadowInfo.isHit && info.shape.material.gloss > 0){ - var Lv = Flog.RayTracer.Vector.prototype.subtract( - info.shape.position, - light.position - ).normalize(); - - var E = Flog.RayTracer.Vector.prototype.subtract( - scene.camera.position, - info.shape.position - ).normalize(); - - var H = Flog.RayTracer.Vector.prototype.subtract( - E, - Lv - ).normalize(); - - var glossWeight = Math.pow(Math.max(info.normal.dot(H), 0), shininess); - color = Flog.RayTracer.Color.prototype.add( - Flog.RayTracer.Color.prototype.multiplyScalar(light.color, glossWeight), - color - ); - } - } - color.limit(); - return color; - } -}; - - -function renderScene(){ - var scene = new Flog.RayTracer.Scene(); - - scene.camera = new Flog.RayTracer.Camera( - new Flog.RayTracer.Vector(0, 0, -15), - new Flog.RayTracer.Vector(-0.2, 0, 5), - new Flog.RayTracer.Vector(0, 1, 0) - ); - - scene.background = new Flog.RayTracer.Background( - new Flog.RayTracer.Color(0.5, 0.5, 0.5), - 0.4 - ); - - var sphere = new Flog.RayTracer.Shape.Sphere( - new Flog.RayTracer.Vector(-1.5, 1.5, 2), - 1.5, - new Flog.RayTracer.Material.Solid( - new Flog.RayTracer.Color(0,0.5,0.5), - 0.3, - 0.0, - 0.0, - 2.0 - ) - ); - - var sphere1 = new Flog.RayTracer.Shape.Sphere( - new Flog.RayTracer.Vector(1, 0.25, 1), - 0.5, - new Flog.RayTracer.Material.Solid( - new Flog.RayTracer.Color(0.9,0.9,0.9), - 0.1, - 0.0, - 0.0, - 1.5 - ) - ); - - var plane = new Flog.RayTracer.Shape.Plane( - new Flog.RayTracer.Vector(0.1, 0.9, -0.5).normalize(), - 1.2, - new Flog.RayTracer.Material.Chessboard( - new Flog.RayTracer.Color(1,1,1), - new Flog.RayTracer.Color(0,0,0), - 0.2, - 0.0, - 1.0, - 0.7 - ) - ); - - scene.shapes.push(plane); - scene.shapes.push(sphere); - scene.shapes.push(sphere1); - - var light = new Flog.RayTracer.Light( - new Flog.RayTracer.Vector(5, 10, -1), - new Flog.RayTracer.Color(0.8, 0.8, 0.8) - ); - - var light1 = new Flog.RayTracer.Light( - new Flog.RayTracer.Vector(-3, 5, -15), - new Flog.RayTracer.Color(0.8, 0.8, 0.8), - 100 - ); - - scene.lights.push(light); - scene.lights.push(light1); - - var imageWidth = 100; // $F('imageWidth'); - var imageHeight = 100; // $F('imageHeight'); - var pixelSize = "5,5".split(','); // $F('pixelSize').split(','); - var renderDiffuse = true; // $F('renderDiffuse'); - var renderShadows = true; // $F('renderShadows'); - var renderHighlights = true; // $F('renderHighlights'); - var renderReflections = true; // $F('renderReflections'); - var rayDepth = 2;//$F('rayDepth'); - - var raytracer = new Flog.RayTracer.Engine( - { - canvasWidth: imageWidth, - canvasHeight: imageHeight, - pixelWidth: pixelSize[0], - pixelHeight: pixelSize[1], - "renderDiffuse": renderDiffuse, - "renderHighlights": renderHighlights, - "renderShadows": renderShadows, - "renderReflections": renderReflections, - "rayDepth": rayDepth - } - ); - - raytracer.renderScene(scene, null, 0); -} - diff --git a/regexp2000/benchmarks/richards.js b/regexp2000/benchmarks/richards.js deleted file mode 100644 index bb88623cd..000000000 --- a/regexp2000/benchmarks/richards.js +++ /dev/null @@ -1,539 +0,0 @@ -// Copyright 2006-2008 the V8 project authors. All rights reserved. -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following -// disclaimer in the documentation and/or other materials provided -// with the distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -// This is a JavaScript implementation of the Richards -// benchmark from: -// -// http://www.cl.cam.ac.uk/~mr10/Bench.html -// -// The benchmark was originally implemented in BCPL by -// Martin Richards. - - -var Richards = new BenchmarkSuite('Richards', 34886, [ - new Benchmark("Richards", runRichards) -]); - - -/** - * The Richards benchmark simulates the task dispatcher of an - * operating system. - **/ -function runRichards() { - var scheduler = new Scheduler(); - scheduler.addIdleTask(ID_IDLE, 0, null, COUNT); - - var queue = new Packet(null, ID_WORKER, KIND_WORK); - queue = new Packet(queue, ID_WORKER, KIND_WORK); - scheduler.addWorkerTask(ID_WORKER, 1000, queue); - - queue = new Packet(null, ID_DEVICE_A, KIND_DEVICE); - queue = new Packet(queue, ID_DEVICE_A, KIND_DEVICE); - queue = new Packet(queue, ID_DEVICE_A, KIND_DEVICE); - scheduler.addHandlerTask(ID_HANDLER_A, 2000, queue); - - queue = new Packet(null, ID_DEVICE_B, KIND_DEVICE); - queue = new Packet(queue, ID_DEVICE_B, KIND_DEVICE); - queue = new Packet(queue, ID_DEVICE_B, KIND_DEVICE); - scheduler.addHandlerTask(ID_HANDLER_B, 3000, queue); - - scheduler.addDeviceTask(ID_DEVICE_A, 4000, null); - - scheduler.addDeviceTask(ID_DEVICE_B, 5000, null); - - scheduler.schedule(); - - if (scheduler.queueCount != EXPECTED_QUEUE_COUNT || - scheduler.holdCount != EXPECTED_HOLD_COUNT) { - var msg = - "Error during execution: queueCount = " + scheduler.queueCount + - ", holdCount = " + scheduler.holdCount + "."; - throw new Error(msg); - } -} - -var COUNT = 1000; - -/** - * These two constants specify how many times a packet is queued and - * how many times a task is put on hold in a correct run of richards. - * They don't have any meaning a such but are characteristic of a - * correct run so if the actual queue or hold count is different from - * the expected there must be a bug in the implementation. - **/ -var EXPECTED_QUEUE_COUNT = 2322; -var EXPECTED_HOLD_COUNT = 928; - - -/** - * A scheduler can be used to schedule a set of tasks based on their relative - * priorities. Scheduling is done by maintaining a list of task control blocks - * which holds tasks and the data queue they are processing. - * @constructor - */ -function Scheduler() { - this.queueCount = 0; - this.holdCount = 0; - this.blocks = new Array(NUMBER_OF_IDS); - this.list = null; - this.currentTcb = null; - this.currentId = null; -} - -var ID_IDLE = 0; -var ID_WORKER = 1; -var ID_HANDLER_A = 2; -var ID_HANDLER_B = 3; -var ID_DEVICE_A = 4; -var ID_DEVICE_B = 5; -var NUMBER_OF_IDS = 6; - -var KIND_DEVICE = 0; -var KIND_WORK = 1; - -/** - * Add an idle task to this scheduler. - * @param {int} id the identity of the task - * @param {int} priority the task's priority - * @param {Packet} queue the queue of work to be processed by the task - * @param {int} count the number of times to schedule the task - */ -Scheduler.prototype.addIdleTask = function (id, priority, queue, count) { - this.addRunningTask(id, priority, queue, new IdleTask(this, 1, count)); -}; - -/** - * Add a work task to this scheduler. - * @param {int} id the identity of the task - * @param {int} priority the task's priority - * @param {Packet} queue the queue of work to be processed by the task - */ -Scheduler.prototype.addWorkerTask = function (id, priority, queue) { - this.addTask(id, priority, queue, new WorkerTask(this, ID_HANDLER_A, 0)); -}; - -/** - * Add a handler task to this scheduler. - * @param {int} id the identity of the task - * @param {int} priority the task's priority - * @param {Packet} queue the queue of work to be processed by the task - */ -Scheduler.prototype.addHandlerTask = function (id, priority, queue) { - this.addTask(id, priority, queue, new HandlerTask(this)); -}; - -/** - * Add a handler task to this scheduler. - * @param {int} id the identity of the task - * @param {int} priority the task's priority - * @param {Packet} queue the queue of work to be processed by the task - */ -Scheduler.prototype.addDeviceTask = function (id, priority, queue) { - this.addTask(id, priority, queue, new DeviceTask(this)) -}; - -/** - * Add the specified task and mark it as running. - * @param {int} id the identity of the task - * @param {int} priority the task's priority - * @param {Packet} queue the queue of work to be processed by the task - * @param {Task} task the task to add - */ -Scheduler.prototype.addRunningTask = function (id, priority, queue, task) { - this.addTask(id, priority, queue, task); - this.currentTcb.setRunning(); -}; - -/** - * Add the specified task to this scheduler. - * @param {int} id the identity of the task - * @param {int} priority the task's priority - * @param {Packet} queue the queue of work to be processed by the task - * @param {Task} task the task to add - */ -Scheduler.prototype.addTask = function (id, priority, queue, task) { - this.currentTcb = new TaskControlBlock(this.list, id, priority, queue, task); - this.list = this.currentTcb; - this.blocks[id] = this.currentTcb; -}; - -/** - * Execute the tasks managed by this scheduler. - */ -Scheduler.prototype.schedule = function () { - this.currentTcb = this.list; - while (this.currentTcb != null) { - if (this.currentTcb.isHeldOrSuspended()) { - this.currentTcb = this.currentTcb.link; - } else { - this.currentId = this.currentTcb.id; - this.currentTcb = this.currentTcb.run(); - } - } -}; - -/** - * Release a task that is currently blocked and return the next block to run. - * @param {int} id the id of the task to suspend - */ -Scheduler.prototype.release = function (id) { - var tcb = this.blocks[id]; - if (tcb == null) return tcb; - tcb.markAsNotHeld(); - if (tcb.priority > this.currentTcb.priority) { - return tcb; - } else { - return this.currentTcb; - } -}; - -/** - * Block the currently executing task and return the next task control block - * to run. The blocked task will not be made runnable until it is explicitly - * released, even if new work is added to it. - */ -Scheduler.prototype.holdCurrent = function () { - this.holdCount++; - this.currentTcb.markAsHeld(); - return this.currentTcb.link; -}; - -/** - * Suspend the currently executing task and return the next task control block - * to run. If new work is added to the suspended task it will be made runnable. - */ -Scheduler.prototype.suspendCurrent = function () { - this.currentTcb.markAsSuspended(); - return this.currentTcb; -}; - -/** - * Add the specified packet to the end of the worklist used by the task - * associated with the packet and make the task runnable if it is currently - * suspended. - * @param {Packet} packet the packet to add - */ -Scheduler.prototype.queue = function (packet) { - var t = this.blocks[packet.id]; - if (t == null) return t; - this.queueCount++; - packet.link = null; - packet.id = this.currentId; - return t.checkPriorityAdd(this.currentTcb, packet); -}; - -/** - * A task control block manages a task and the queue of work packages associated - * with it. - * @param {TaskControlBlock} link the preceding block in the linked block list - * @param {int} id the id of this block - * @param {int} priority the priority of this block - * @param {Packet} queue the queue of packages to be processed by the task - * @param {Task} task the task - * @constructor - */ -function TaskControlBlock(link, id, priority, queue, task) { - this.link = link; - this.id = id; - this.priority = priority; - this.queue = queue; - this.task = task; - if (queue == null) { - this.state = STATE_SUSPENDED; - } else { - this.state = STATE_SUSPENDED_RUNNABLE; - } -} - -/** - * The task is running and is currently scheduled. - */ -var STATE_RUNNING = 0; - -/** - * The task has packets left to process. - */ -var STATE_RUNNABLE = 1; - -/** - * The task is not currently running. The task is not blocked as such and may -* be started by the scheduler. - */ -var STATE_SUSPENDED = 2; - -/** - * The task is blocked and cannot be run until it is explicitly released. - */ -var STATE_HELD = 4; - -var STATE_SUSPENDED_RUNNABLE = STATE_SUSPENDED | STATE_RUNNABLE; -var STATE_NOT_HELD = ~STATE_HELD; - -TaskControlBlock.prototype.setRunning = function () { - this.state = STATE_RUNNING; -}; - -TaskControlBlock.prototype.markAsNotHeld = function () { - this.state = this.state & STATE_NOT_HELD; -}; - -TaskControlBlock.prototype.markAsHeld = function () { - this.state = this.state | STATE_HELD; -}; - -TaskControlBlock.prototype.isHeldOrSuspended = function () { - return (this.state & STATE_HELD) != 0 || (this.state == STATE_SUSPENDED); -}; - -TaskControlBlock.prototype.markAsSuspended = function () { - this.state = this.state | STATE_SUSPENDED; -}; - -TaskControlBlock.prototype.markAsRunnable = function () { - this.state = this.state | STATE_RUNNABLE; -}; - -/** - * Runs this task, if it is ready to be run, and returns the next task to run. - */ -TaskControlBlock.prototype.run = function () { - var packet; - if (this.state == STATE_SUSPENDED_RUNNABLE) { - packet = this.queue; - this.queue = packet.link; - if (this.queue == null) { - this.state = STATE_RUNNING; - } else { - this.state = STATE_RUNNABLE; - } - } else { - packet = null; - } - return this.task.run(packet); -}; - -/** - * Adds a packet to the worklist of this block's task, marks this as runnable if - * necessary, and returns the next runnable object to run (the one - * with the highest priority). - */ -TaskControlBlock.prototype.checkPriorityAdd = function (task, packet) { - if (this.queue == null) { - this.queue = packet; - this.markAsRunnable(); - if (this.priority > task.priority) return this; - } else { - this.queue = packet.addTo(this.queue); - } - return task; -}; - -TaskControlBlock.prototype.toString = function () { - return "tcb { " + this.task + "@" + this.state + " }"; -}; - -/** - * An idle task doesn't do any work itself but cycles control between the two - * device tasks. - * @param {Scheduler} scheduler the scheduler that manages this task - * @param {int} v1 a seed value that controls how the device tasks are scheduled - * @param {int} count the number of times this task should be scheduled - * @constructor - */ -function IdleTask(scheduler, v1, count) { - this.scheduler = scheduler; - this.v1 = v1; - this.count = count; -} - -IdleTask.prototype.run = function (packet) { - this.count--; - if (this.count == 0) return this.scheduler.holdCurrent(); - if ((this.v1 & 1) == 0) { - this.v1 = this.v1 >> 1; - return this.scheduler.release(ID_DEVICE_A); - } else { - this.v1 = (this.v1 >> 1) ^ 0xD008; - return this.scheduler.release(ID_DEVICE_B); - } -}; - -IdleTask.prototype.toString = function () { - return "IdleTask" -}; - -/** - * A task that suspends itself after each time it has been run to simulate - * waiting for data from an external device. - * @param {Scheduler} scheduler the scheduler that manages this task - * @constructor - */ -function DeviceTask(scheduler) { - this.scheduler = scheduler; - this.v1 = null; -} - -DeviceTask.prototype.run = function (packet) { - if (packet == null) { - if (this.v1 == null) return this.scheduler.suspendCurrent(); - var v = this.v1; - this.v1 = null; - return this.scheduler.queue(v); - } else { - this.v1 = packet; - return this.scheduler.holdCurrent(); - } -}; - -DeviceTask.prototype.toString = function () { - return "DeviceTask"; -}; - -/** - * A task that manipulates work packets. - * @param {Scheduler} scheduler the scheduler that manages this task - * @param {int} v1 a seed used to specify how work packets are manipulated - * @param {int} v2 another seed used to specify how work packets are manipulated - * @constructor - */ -function WorkerTask(scheduler, v1, v2) { - this.scheduler = scheduler; - this.v1 = v1; - this.v2 = v2; -} - -WorkerTask.prototype.run = function (packet) { - if (packet == null) { - return this.scheduler.suspendCurrent(); - } else { - if (this.v1 == ID_HANDLER_A) { - this.v1 = ID_HANDLER_B; - } else { - this.v1 = ID_HANDLER_A; - } - packet.id = this.v1; - packet.a1 = 0; - for (var i = 0; i < DATA_SIZE; i++) { - this.v2++; - if (this.v2 > 26) this.v2 = 1; - packet.a2[i] = this.v2; - } - return this.scheduler.queue(packet); - } -}; - -WorkerTask.prototype.toString = function () { - return "WorkerTask"; -}; - -/** - * A task that manipulates work packets and then suspends itself. - * @param {Scheduler} scheduler the scheduler that manages this task - * @constructor - */ -function HandlerTask(scheduler) { - this.scheduler = scheduler; - this.v1 = null; - this.v2 = null; -} - -HandlerTask.prototype.run = function (packet) { - if (packet != null) { - if (packet.kind == KIND_WORK) { - this.v1 = packet.addTo(this.v1); - } else { - this.v2 = packet.addTo(this.v2); - } - } - if (this.v1 != null) { - var count = this.v1.a1; - var v; - if (count < DATA_SIZE) { - if (this.v2 != null) { - v = this.v2; - this.v2 = this.v2.link; - v.a1 = this.v1.a2[count]; - this.v1.a1 = count + 1; - return this.scheduler.queue(v); - } - } else { - v = this.v1; - this.v1 = this.v1.link; - return this.scheduler.queue(v); - } - } - return this.scheduler.suspendCurrent(); -}; - -HandlerTask.prototype.toString = function () { - return "HandlerTask"; -}; - -/* --- * - * P a c k e t - * --- */ - -var DATA_SIZE = 4; - -/** - * A simple package of data that is manipulated by the tasks. The exact layout - * of the payload data carried by a packet is not importaint, and neither is the - * nature of the work performed on packets by the tasks. - * - * Besides carrying data, packets form linked lists and are hence used both as - * data and worklists. - * @param {Packet} link the tail of the linked list of packets - * @param {int} id an ID for this packet - * @param {int} kind the type of this packet - * @constructor - */ -function Packet(link, id, kind) { - this.link = link; - this.id = id; - this.kind = kind; - this.a1 = 0; - this.a2 = new Array(DATA_SIZE); -} - -/** - * Add this packet to the end of a worklist, and return the worklist. - * @param {Packet} queue the worklist to add this packet to - */ -Packet.prototype.addTo = function (queue) { - this.link = null; - if (queue == null) return this; - var peek, next = queue; - while ((peek = next.link) != null) - next = peek; - next.link = this; - return queue; -}; - -Packet.prototype.toString = function () { - return "Packet"; -}; diff --git a/regexp2000/benchmarks/run.html b/regexp2000/benchmarks/run.html deleted file mode 100644 index 41e4f7871..000000000 --- a/regexp2000/benchmarks/run.html +++ /dev/null @@ -1,171 +0,0 @@ - - -V8 Benchmark Suite - - - - - - - - - - - -
-

V8 Benchmark Suite - version ?

- - -
-This page contains a suite of pure JavaScript benchmarks that we have -used to tune V8. The final score is computed as the geometric mean of -the individual results to make it independent of the running times of -the individual benchmarks and of a reference system (score -100). Scores are not comparable across benchmark suite versions and -higher scores means better performance: Bigger is better! - -
    -
  • Richards
    OS kernel simulation benchmark, originally written in BCPL by Martin Richards (539 lines).
  • -
  • DeltaBlue
    One-way constraint solver, originally written in Smalltalk by John Maloney and Mario Wolczko (880 lines).
  • -
  • Crypto
    Encryption and decryption benchmark based on code by Tom Wu (1689 lines).
  • -
  • RayTrace
    Ray tracer benchmark based on code by Adam Burmister (3418 lines).
  • -
  • EarleyBoyer
    Classic Scheme benchmarks, translated to JavaScript by Florian Loitsch's Scheme2Js compiler (4682 lines).
  • -
- -

Revisions of the benchmark suite

- -

Please note that benchmark results are not comparable unless both -results are run with the same revision of the benchmark suite. We will be -making revisions from time to time in order to fix bugs or expand the scope -of the benchmark suite.

- -

Version 1

- -

Initial release.

- -

Version 2

- -

For version 2 the crypto benchmark was fixed. Previously, the -decryption stage was given plaintext as input, which resulted in an -error. Now, the decryption stage is given the output of the -encryption stage as input. The result is checked against the original -plaintext. For this to give the correct results the crypto objects -are reset for each iteration of the benchmark. In addition, the size -of the plain text has been increased a little and the use of -Math.random() and new Date() to build an RNG pool has been -removed.

- -

Other benchmarks were fixed to do elementary verification of the -results of their calculations. This is to avoid accidentally -obtaining scores that are the result of an incorrect JavaScript engine -optimization.

- - -
-
-
Starting...
-
-
-
-
- -
- - - diff --git a/regexp2000/benchmarks/run.js b/regexp2000/benchmarks/run.js deleted file mode 100644 index da2373b84..000000000 --- a/regexp2000/benchmarks/run.js +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2008 the V8 project authors. All rights reserved. -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following -// disclaimer in the documentation and/or other materials provided -// with the distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -load('base.js'); -load('richards.js'); -load('deltablue.js'); -load('crypto.js'); -load('raytrace.js'); -load('earley-boyer.js'); - -var success = true; - -function PrintResult(name, result) { - print(name + ': ' + result); -} - - -function PrintError(name, error) { - PrintResult(name, error); - success = false; -} - - -function PrintScore(score) { - if (success) { - print('----'); - print('Score (version ' + BenchmarkSuite.version + '): ' + score); - } -} - - -BenchmarkSuite.RunSuites({ NotifyResult: PrintResult, - NotifyError: PrintError, - NotifyScore: PrintScore }); diff --git a/regexp2000/benchmarks/v8-logo.png b/regexp2000/benchmarks/v8-logo.png deleted file mode 100644 index 91867657f7aa419c355ce4b25667f788905947a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24293 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 4) -#define EXPORT __attribute__ ((visibility("default"))) -#else // defined(__GNUC__) && (__GNUC__ >= 4) -#define EXPORT -#endif // defined(__GNUC__) && (__GNUC__ >= 4) - -#endif // _WIN32 - - -/** - * Debugger support for the V8 JavaScript engine. - */ -namespace v8 { - -// Debug events which can occur in the V8 JavaScript engine. -enum DebugEvent { - Break = 1, - Exception = 2, - NewFunction = 3, - BeforeCompile = 4, - AfterCompile = 5 -}; - - -/** - * Debug event callback function. - * - * \param event the debug event from which occoured (from the DebugEvent - * enumeration) - * \param exec_state execution state (JavaScript object) - * \param event_data event specific data (JavaScript object) - * \param data value passed by the user to AddDebugEventListener - */ -typedef void (*DebugEventCallback)(DebugEvent event, - Handle exec_state, - Handle event_data, - Handle data); - - -/** - * Debug message callback function. - * - * \param message the debug message - * \param length length of the message - * A DebugMessageHandler does not take posession of the message string, - * and must not rely on the data persisting after the handler returns. - */ -typedef void (*DebugMessageHandler)(const uint16_t* message, int length, - void* data); - - -class EXPORT Debug { - public: - // Add a C debug event listener. - static bool AddDebugEventListener(DebugEventCallback that, - Handle data = Handle()); - - // Add a JavaScript debug event listener. - static bool AddDebugEventListener(v8::Handle that, - Handle data = Handle()); - - // Remove a C debug event listener. - static void RemoveDebugEventListener(DebugEventCallback that); - - // Remove a JavaScript debug event listener. - static void RemoveDebugEventListener(v8::Handle that); - - // Generate a stack dump. - static void StackDump(); - - // Break execution of JavaScript. - static void DebugBreak(); - - // Message based interface. The message protocol is JSON. - static void SetMessageHandler(DebugMessageHandler handler, void* data = NULL); - static void SendCommand(const uint16_t* command, int length); -}; - - -} // namespace v8 - - -#undef EXPORT - - -#endif // V8_DEBUG_H_ diff --git a/regexp2000/include/v8.h b/regexp2000/include/v8.h deleted file mode 100644 index 70b1f526c..000000000 --- a/regexp2000/include/v8.h +++ /dev/null @@ -1,2433 +0,0 @@ -// Copyright 2007-2008 the V8 project authors. All rights reserved. -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following -// disclaimer in the documentation and/or other materials provided -// with the distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -/** \mainpage V8 API Reference Guide - * - * V8 is Google's open source JavaScript engine. - * - * This set of documents provides reference material generated from the - * V8 header file, include/v8.h. - * - * For other documentation see http://code.google.com/apis/v8/ - */ - -#ifndef V8_H_ -#define V8_H_ - -#include - -#ifdef _WIN32 -typedef int int32_t; -typedef unsigned int uint32_t; -typedef unsigned short uint16_t; // NOLINT -typedef long long int64_t; // NOLINT - -// Setup for Windows DLL export/import. When building the V8 DLL the -// BUILDING_V8_SHARED needs to be defined. When building a program which uses -// the V8 DLL USING_V8_SHARED needs to be defined. When either building the V8 -// static library or building a program which uses the V8 static library neither -// BUILDING_V8_SHARED nor USING_V8_SHARED should be defined. -// The reason for having both EXPORT and EXPORT_INLINE is that classes which -// have their code inside this header file needs to have __declspec(dllexport) -// when building the DLL but cannot have __declspec(dllimport) when building -// a program which uses the DLL. -#if defined(BUILDING_V8_SHARED) && defined(USING_V8_SHARED) -#error both BUILDING_V8_SHARED and USING_V8_SHARED are set - please check the\ - build configuration to ensure that at most one of these is set -#endif - -#ifdef BUILDING_V8_SHARED -#define EXPORT __declspec(dllexport) -#define EXPORT_INLINE __declspec(dllexport) -#elif USING_V8_SHARED -#define EXPORT __declspec(dllimport) -#define EXPORT_INLINE -#else -#define EXPORT -#define EXPORT_INLINE -#endif // BUILDING_V8_SHARED - -#else // _WIN32 - -#include - -// Setup for Linux shared library export. There is no need to destinguish -// neither between building or using the V8 shared library nor between using -// the shared or static V8 library as there is on Windows. Therefore there is -// no checking of BUILDING_V8_SHARED and USING_V8_SHARED. -#if defined(__GNUC__) && (__GNUC__ >= 4) -#define EXPORT __attribute__ ((visibility("default"))) -#define EXPORT_INLINE __attribute__ ((visibility("default"))) -#else // defined(__GNUC__) && (__GNUC__ >= 4) -#define EXPORT -#define EXPORT_INLINE -#endif // defined(__GNUC__) && (__GNUC__ >= 4) - -#endif // _WIN32 - -/** - * The v8 JavaScript engine. - */ -namespace v8 { - -class Context; -class String; -class Value; -class Utils; -class Number; -class Object; -class Array; -class Int32; -class Uint32; -class External; -class Primitive; -class Boolean; -class Integer; -class Function; -class Date; -class ImplementationUtilities; -class Signature; -template class Handle; -template class Local; -template class Persistent; -class FunctionTemplate; -class ObjectTemplate; -class Data; - - -// --- W e a k H a n d l e s - - -/** - * A weak reference callback function. - * - * \param object the weak global object to be reclaimed by the garbage collector - * \param parameter the value passed in when making the weak global object - */ -typedef void (*WeakReferenceCallback)(Persistent object, - void* parameter); - - -// --- H a n d l e s --- - -#define TYPE_CHECK(T, S) \ - while (false) { \ - *(static_cast(0)) = static_cast(0); \ - } - -/** - * An object reference managed by the v8 garbage collector. - * - * All objects returned from v8 have to be tracked by the garbage - * collector so that it knows that the objects are still alive. Also, - * because the garbage collector may move objects, it is unsafe to - * point directly to an object. Instead, all objects are stored in - * handles which are known by the garbage collector and updated - * whenever an object moves. Handles should always be passed by value - * (except in cases like out-parameters) and they should never be - * allocated on the heap. - * - * There are two types of handles: local and persistent handles. - * Local handles are light-weight and transient and typically used in - * local operations. They are managed by HandleScopes. Persistent - * handles can be used when storing objects across several independent - * operations and have to be explicitly deallocated when they're no - * longer used. - * - * It is safe to extract the object stored in the handle by - * dereferencing the handle (for instance, to extract the Object* from - * an Handle); the value will still be governed by a handle - * behind the scenes and the same rules apply to these values as to - * their handles. - */ -template class EXPORT_INLINE Handle { - public: - - /** - * Creates an empty handle. - */ - Handle(); - - /** - * Creates a new handle for the specified value. - */ - explicit Handle(T* val) : val_(val) { } - - /** - * Creates a handle for the contents of the specified handle. This - * constructor allows you to pass handles as arguments by value and - * to assign between handles. However, if you try to assign between - * incompatible handles, for instance from a Handle to a - * Handle it will cause a compiletime error. Assigning - * between compatible handles, for instance assigning a - * Handle to a variable declared as Handle, is legal - * because String is a subclass of Value. - */ - template inline Handle(Handle that) - : val_(reinterpret_cast(*that)) { - /** - * This check fails when trying to convert between incompatible - * handles. For example, converting from a Handle to a - * Handle. - */ - TYPE_CHECK(T, S); - } - - /** - * Returns true if the handle is empty. - */ - bool IsEmpty() { return val_ == 0; } - - T* operator->(); - - T* operator*(); - - /** - * Sets the handle to be empty. IsEmpty() will then return true. - */ - void Clear() { this->val_ = 0; } - - /** - * Checks whether two handles are the same. - * Returns true if both are empty, or if the objects - * to which they refer are identical. - * The handles' references are not checked. - */ - template bool operator==(Handle that) { - void** a = reinterpret_cast(**this); - void** b = reinterpret_cast(*that); - if (a == 0) return b == 0; - if (b == 0) return false; - return *a == *b; - } - - /** - * Checks whether two handles are different. - * Returns true if only one of the handles is empty, or if - * the objects to which they refer are different. - * The handles' references are not checked. - */ - template bool operator!=(Handle that) { - return !operator==(that); - } - - template static inline Handle Cast(Handle that) { - if (that.IsEmpty()) return Handle(); - return Handle(T::Cast(*that)); - } - - private: - T* val_; -}; - - -/** - * A light-weight stack-allocated object handle. All operations - * that return objects from within v8 return them in local handles. They - * are created within HandleScopes, and all local handles allocated within a - * handle scope are destroyed when the handle scope is destroyed. Hence it - * is not necessary to explicitly deallocate local handles. - */ -template class EXPORT_INLINE Local : public Handle { - public: - Local(); - template inline Local(Local that) - : Handle(reinterpret_cast(*that)) { - /** - * This check fails when trying to convert between incompatible - * handles. For example, converting from a Handle to a - * Handle. - */ - TYPE_CHECK(T, S); - } - template inline Local(S* that) : Handle(that) { } - template static inline Local Cast(Local that) { - if (that.IsEmpty()) return Local(); - return Local(T::Cast(*that)); - } - - /** Create a local handle for the content of another handle. - * The referee is kept alive by the local handle even when - * the original handle is destroyed/disposed. - */ - static Local New(Handle that); -}; - - -/** - * An object reference that is independent of any handle scope. Where - * a Local handle only lives as long as the HandleScope in which it was - * allocated, a Persistent handle remains valid until it is explicitly - * disposed. - * - * A persistent handle contains a reference to a storage cell within - * the v8 engine which holds an object value and which is updated by - * the garbage collector whenever the object is moved. A new storage - * cell can be created using Persistent::New and existing handles can - * be disposed using Persistent::Dispose. Since persistent handles - * are passed by value you may have many persistent handle objects - * that point to the same storage cell. For instance, if you pass a - * persistent handle as an argument to a function you will not get two - * different storage cells but rather two references to the same - * storage cell. - */ -template class EXPORT_INLINE Persistent : public Handle { - public: - - /** - * Creates an empty persistent handle that doesn't point to any - * storage cell. - */ - Persistent(); - - /** - * Creates a persistent handle for the same storage cell as the - * specified handle. This constructor allows you to pass persistent - * handles as arguments by value and to assign between persistent - * handles. However, attempting to assign between incompatible - * persistent handles, for instance from a Persistent to a - * Persistent will cause a compiletime error. Assigning - * between compatible persistent handles, for instance assigning a - * Persistent to a variable declared as Persistent, - * is allowed as String is a subclass of Value. - */ - template inline Persistent(Persistent that) - : Handle(reinterpret_cast(*that)) { - /** - * This check fails when trying to convert between incompatible - * handles. For example, converting from a Handle to a - * Handle. - */ - TYPE_CHECK(T, S); - } - - template inline Persistent(S* that) : Handle(that) { } - - /** - * "Casts" a plain handle which is known to be a persistent handle - * to a persistent handle. - */ - template explicit inline Persistent(Handle that) - : Handle(*that) { } - - template static inline Persistent Cast(Persistent that) { - if (that.IsEmpty()) return Persistent(); - return Persistent(T::Cast(*that)); - } - - /** - * Creates a new persistent handle for an existing local or - * persistent handle. - */ - static Persistent New(Handle that); - - /** - * Releases the storage cell referenced by this persistent handle. - * Does not remove the reference to the cell from any handles. - * This handle's reference, and any any other references to the storage - * cell remain and IsEmpty will still return false. - */ - void Dispose(); - - /** - * Make the reference to this object weak. When only weak handles - * refer to the object, the garbage collector will perform a - * callback to the given V8::WeakReferenceCallback function, passing - * it the object reference and the given parameters. - */ - void MakeWeak(void* parameters, WeakReferenceCallback callback); - - /** Clears the weak reference to this object.*/ - void ClearWeak(); - - /** - *Checks if the handle holds the only reference to an object. - */ - bool IsNearDeath(); - - /** - * Returns true if the handle's reference is weak. - */ - bool IsWeak(); - - private: - friend class ImplementationUtilities; - friend class ObjectTemplate; -}; - - - /** - * A stack-allocated class that governs a number of local handles. - * After a handle scope has been created, all local handles will be - * allocated within that handle scope until either the handle scope is - * deleted or another handle scope is created. If there is already a - * handle scope and a new one is created, all allocations will take - * place in the new handle scope until it is deleted. After that, - * new handles will again be allocated in the original handle scope. - * - * After the handle scope of a local handle has been deleted the - * garbage collector will no longer track the object stored in the - * handle and may deallocate it. The behavior of accessing a handle - * for which the handle scope has been deleted is undefined. - */ -class EXPORT HandleScope { - public: - HandleScope() : previous_(current_), is_closed_(false) { - current_.extensions = 0; - } - - ~HandleScope() { - // TODO(1245391): In a perfect world, there would be a way of not - // having to check for explicitly closed scopes maybe through - // subclassing HandleScope? - if (!is_closed_) RestorePreviousState(); - } - - /** - * TODO(1245391): Consider introducing a subclass for this. - * Closes the handle scope and returns the value as a handle in the - * previous scope, which is the new current scope after the call. - */ - template Local Close(Handle value); - - /** - * Counts the number of allocated handles. - */ - static int NumberOfHandles(); - - /** - * Creates a new handle with the given value. - */ - static void** CreateHandle(void* value); - - private: - // Make it impossible to create heap-allocated or illegal handle - // scopes by disallowing certain operations. - HandleScope(const HandleScope&); - void operator=(const HandleScope&); - void* operator new(size_t size); - void operator delete(void*, size_t); - - class EXPORT Data { - public: - int extensions; - void** next; - void** limit; - inline void Initialize() { - extensions = -1; - next = limit = NULL; - } - }; - - static Data current_; - const Data previous_; - - /** - * Re-establishes the previous scope state. Should be called only - * once, and only for the current scope. - */ - void RestorePreviousState() { - if (current_.extensions > 0) DeleteExtensions(); - current_ = previous_; -#ifdef DEBUG - ZapRange(current_.next, current_.limit); -#endif - } - - // TODO(1245391): Consider creating a subclass for this. - bool is_closed_; - void** RawClose(void** value); - - /** Deallocates any extensions used by the current scope.*/ - static void DeleteExtensions(); - - // Zaps the handles in the half-open interval [start, end). - static void ZapRange(void** start, void** end); - - friend class ImplementationUtilities; -}; - - -// --- S p e c i a l o b j e c t s --- - - -/** - * The superclass of values and API object templates. - */ -class EXPORT Data { - private: - Data(); -}; - - -/** - * Pre-compilation data that can be associated with a script. This - * data can be calculated for a script in advance of actually - * compiling it, and can be stored between compilations. When script - * data is given to the compile method compilation will be faster. - */ -class EXPORT ScriptData { // NOLINT - public: - virtual ~ScriptData() { } - static ScriptData* PreCompile(const char* input, int length); - static ScriptData* New(unsigned* data, int length); - - virtual int Length() = 0; - virtual unsigned* Data() = 0; -}; - - -/** - * The origin, within a file, of a script. - */ -class EXPORT ScriptOrigin { - public: - ScriptOrigin(Handle resource_name, - Handle resource_line_offset = Handle(), - Handle resource_column_offset = Handle()) - : resource_name_(resource_name), - resource_line_offset_(resource_line_offset), - resource_column_offset_(resource_column_offset) { } - inline Handle ResourceName() const; - inline Handle ResourceLineOffset() const; - inline Handle ResourceColumnOffset() const; - private: - Handle resource_name_; - Handle resource_line_offset_; - Handle resource_column_offset_; -}; - - -/** - * A compiled JavaScript script. - */ -class EXPORT Script { - public: - - /** - * Compiles the specified script. The ScriptOrigin* and ScriptData* - * parameters are owned by the caller of Script::Compile. No - * references to these objects are kept after compilation finishes. - */ - static Local