Index: frog/minfrog |
diff --git a/frog/minfrog b/frog/minfrog |
index 1dd869c082d8edde50889ee1369d3159cc11a078..4948e0da77d82a396e9b1ba67152fa8e42140b02 100755 |
--- a/frog/minfrog |
+++ b/frog/minfrog |
@@ -485,7 +485,10 @@ Function.prototype.call$2 = function($0, $1) { |
function to$call$2(f) { return f && f.to$call$2(); } |
// ********** Code for Math ************** |
Math.parseInt = function(str) { |
- var ret = parseInt(str); |
+ var match = /^\s*[+-]?(?:(0[xX][abcdefABCDEF0-9]+)|\d+)\s*$/.exec(str); |
+ if (!match) $throw(new BadNumberFormatException(str)); |
+ var isHex = !!match[1]; |
+ var ret = parseInt(str, isHex ? 16 : 10); |
if (isNaN(ret)) $throw(new BadNumberFormatException(str)); |
return ret; |
} |
@@ -1893,7 +1896,9 @@ $defProp(Object.prototype, '$typeNameOf', (function() { |
} |
function chrome$typeNameOf() { |
- return this.constructor.name; |
+ var name = this.constructor.name; |
+ if (name == 'Window') return 'DOMWindow'; |
+ return name; |
} |
function firefox$typeNameOf() { |
@@ -3107,7 +3112,7 @@ CoreJs.prototype.ensureTypeNameOf = function() { |
if (this._generatedTypeNameOf) return; |
this._generatedTypeNameOf = true; |
this.ensureDefProp(); |
- this.writer.writeln("$defProp(Object.prototype, '$typeNameOf', (function() {\n function constructorNameWithFallback(obj) {\n var constructor = obj.constructor;\n if (typeof(constructor) == 'function') {\n // The constructor isn't null or undefined at this point. Try\n // to grab hold of its name.\n var name = constructor.name;\n // If the name is a non-empty string, we use that as the type\n // name of this object. On Firefox, we often get 'Object' as\n // the constructor name even for more specialized objects so\n // we have to fall through to the toString() based implementation\n // below in that case.\n if (typeof(name) == 'string' && name && name != 'Object') return name;\n }\n var string = Object.prototype.toString.call(obj);\n return string.substring(8, string.length - 1);\n }\n\n function chrome$typeNameOf() {\n return this.constructor.name;\n }\n\n function firefox$typeNameOf() {\n var name = constructorNameWithFallback(this);\n if (name == 'Window') return 'DOMWindow';\n if (name == 'Document') return 'HTMLDocument';\n if (name == 'XMLDocument') return 'Document';\n return name;\n }\n\n function ie$typeNameOf() {\n var name = constructorNameWithFallback(this);\n if (name == 'Window') return 'DOMWindow';\n // IE calls both HTML and XML documents 'Document', so we check for the\n // xmlVersion property, which is the empty string on HTML documents.\n if (name == 'Document' && this.xmlVersion) return 'Document';\n if (name == 'Document') return 'HTMLDocument';\n return name;\n }\n\n // If we're not in the browser, we're almost certainly running on v8.\n if (typeof(navigator) != 'object') return chrome$typeNameOf;\n\n var userAgent = navigator.userAgent;\n if (/Chrome/.test(userAgent)) return chrome$typeNameOf;\n if (/Firefox/.test(userAgent)) return firefox$typeNameOf;\n if (/MSIE/.test(userAgent)) return ie$typeNameOf;\n return function() { return constructorNameWithFallback(this); };\n})());"); |
+ this.writer.writeln("$defProp(Object.prototype, '$typeNameOf', (function() {\n function constructorNameWithFallback(obj) {\n var constructor = obj.constructor;\n if (typeof(constructor) == 'function') {\n // The constructor isn't null or undefined at this point. Try\n // to grab hold of its name.\n var name = constructor.name;\n // If the name is a non-empty string, we use that as the type\n // name of this object. On Firefox, we often get 'Object' as\n // the constructor name even for more specialized objects so\n // we have to fall through to the toString() based implementation\n // below in that case.\n if (typeof(name) == 'string' && name && name != 'Object') return name;\n }\n var string = Object.prototype.toString.call(obj);\n return string.substring(8, string.length - 1);\n }\n\n function chrome$typeNameOf() {\n var name = this.constructor.name;\n if (name == 'Window') return 'DOMWindow';\n return name;\n }\n\n function firefox$typeNameOf() {\n var name = constructorNameWithFallback(this);\n if (name == 'Window') return 'DOMWindow';\n if (name == 'Document') return 'HTMLDocument';\n if (name == 'XMLDocument') return 'Document';\n return name;\n }\n\n function ie$typeNameOf() {\n var name = constructorNameWithFallback(this);\n if (name == 'Window') return 'DOMWindow';\n // IE calls both HTML and XML documents 'Document', so we check for the\n // xmlVersion property, which is the empty string on HTML documents.\n if (name == 'Document' && this.xmlVersion) return 'Document';\n if (name == 'Document') return 'HTMLDocument';\n return name;\n }\n\n // If we're not in the browser, we're almost certainly running on v8.\n if (typeof(navigator) != 'object') return chrome$typeNameOf;\n\n var userAgent = navigator.userAgent;\n if (/Chrome/.test(userAgent)) return chrome$typeNameOf;\n if (/Firefox/.test(userAgent)) return firefox$typeNameOf;\n if (/MSIE/.test(userAgent)) return ie$typeNameOf;\n return function() { return constructorNameWithFallback(this); };\n})());"); |
} |
CoreJs.prototype.ensureInheritsHelper = function() { |
if (this._generatedInherits) return; |
@@ -14362,6 +14367,7 @@ World.prototype.withTiming = function(name, f) { |
// ********** Code for FrogOptions ************** |
function FrogOptions(homedir, args, files) { |
this.legOnly = false; |
+ this.ignoreUnrecognizedFlags = false; |
this.checkOnly = false; |
this.disableBoundsChecks = false; |
this.maxInferenceIterations = (4); |
@@ -14391,144 +14397,144 @@ function FrogOptions(homedir, args, files) { |
$globals.world.error(("Invalid configuration " + this.config)); |
$throw("Invalid configuration"); |
} |
- var ignoreUnrecognizedFlags = false; |
var passedLibDir = false; |
this.childArgs = []; |
loop: |
for (var i = (2); |
i < args.get$length(); i++) { |
var arg = args.$index(i); |
- switch (arg) { |
- case "--leg": |
- case "--enable_leg": |
- case "--leg_only": |
- |
- this.legOnly = true; |
- break; |
- |
- case "--enable_asserts": |
+ if (this.tryParseSimpleOption(arg)) continue; |
+ if (arg.endsWith(".dart")) { |
+ this.dartScript = arg; |
+ this.childArgs = args.getRange(i + (1), args.get$length() - i - (1)); |
+ break loop; |
+ } |
+ else if (arg.startsWith("--out=")) { |
+ this.outfile = arg.substring$1("--out=".length); |
+ } |
+ else if (arg.startsWith("--libdir=")) { |
+ this.libDir = arg.substring$1("--libdir=".length); |
+ passedLibDir = true; |
+ } |
+ else if (!this.ignoreUnrecognizedFlags) { |
+ print$(("unrecognized flag: \"" + arg + "\"")); |
+ } |
+ } |
+ if (!passedLibDir && $eq$(this.config, "dev") && !files.fileExists(this.libDir)) { |
+ var temp = "frog/lib"; |
+ if (files.fileExists(temp)) { |
+ this.libDir = temp; |
+ } |
+ else { |
+ this.libDir = "lib"; |
+ } |
+ } |
+} |
+FrogOptions.prototype.tryParseSimpleOption = function(option) { |
+ if (!option.startsWith("--")) return false; |
+ switch (option.replaceAll("_", "-")) { |
+ case "--leg": |
+ case "--enable-leg": |
+ case "--leg-only": |
- this.enableAsserts = true; |
- break; |
+ this.legOnly = true; |
+ return true; |
- case "--enable_type_checks": |
+ case "--enable-asserts": |
- this.enableTypeChecks = true; |
- this.enableAsserts = true; |
- break; |
+ this.enableAsserts = true; |
+ return true; |
- case "--verify_implements": |
+ case "--enable-type-checks": |
- this.verifyImplements = true; |
- break; |
+ this.enableTypeChecks = true; |
+ this.enableAsserts = true; |
+ return true; |
- case "--compile_all": |
+ case "--verify-implements": |
- this.compileAll = true; |
- break; |
+ this.verifyImplements = true; |
+ return true; |
- case "--check-only": |
+ case "--compile-all": |
- this.checkOnly = true; |
- break; |
+ this.compileAll = true; |
+ return true; |
- case "--diet-parse": |
+ case "--check-only": |
- this.dietParse = true; |
- break; |
+ this.checkOnly = true; |
+ return true; |
- case "--ignore-unrecognized-flags": |
+ case "--diet-parse": |
- ignoreUnrecognizedFlags = true; |
- break; |
+ this.dietParse = true; |
+ return true; |
- case "--verbose": |
+ case "--ignore-unrecognized-flags": |
- this.showInfo = true; |
- break; |
+ this.ignoreUnrecognizedFlags = true; |
+ return true; |
- case "--suppress_warnings": |
+ case "--verbose": |
- this.showWarnings = false; |
- break; |
+ this.showInfo = true; |
+ return true; |
- case "--warnings_as_errors": |
+ case "--suppress-warnings": |
- this.warningsAsErrors = true; |
- break; |
+ this.showWarnings = false; |
+ return true; |
- case "--throw_on_errors": |
+ case "--warnings-as-errors": |
- this.throwOnErrors = true; |
- break; |
+ this.warningsAsErrors = true; |
+ return true; |
- case "--throw_on_warnings": |
+ case "--throw-on-errors": |
- this.throwOnWarnings = true; |
- break; |
+ this.throwOnErrors = true; |
+ return true; |
- case "--compile-only": |
+ case "--throw-on-warnings": |
- this.compileOnly = true; |
- break; |
+ this.throwOnWarnings = true; |
+ return true; |
- case "--Xforce_dynamic": |
+ case "--compile-only": |
- this.forceDynamic = true; |
- break; |
+ this.compileOnly = true; |
+ return true; |
- case "--no_colors": |
+ case "--Xforce-dynamic": |
- this.useColors = false; |
- break; |
+ this.forceDynamic = true; |
+ return true; |
- case "--Xinfer_types": |
+ case "--no-colors": |
- this.inferTypes = true; |
- break; |
+ this.useColors = false; |
+ return true; |
- case "--checked": |
+ case "--Xinfer-types": |
- this.enableTypeChecks = true; |
- this.enableAsserts = true; |
- break; |
+ this.inferTypes = true; |
+ return true; |
- case "--unchecked": |
+ case "--enable-checked-mode": |
+ case "--checked": |
- this.disableBoundsChecks = true; |
- break; |
+ this.enableTypeChecks = true; |
+ this.enableAsserts = true; |
+ return true; |
- default: |
+ case "--unchecked": |
- if (arg.endsWith(".dart")) { |
- this.dartScript = arg; |
- this.childArgs = args.getRange(i + (1), args.get$length() - i - (1)); |
- break loop; |
- } |
- else if (arg.startsWith("--out=")) { |
- this.outfile = arg.substring$1("--out=".length); |
- } |
- else if (arg.startsWith("--libdir=")) { |
- this.libDir = arg.substring$1("--libdir=".length); |
- passedLibDir = true; |
- } |
- else { |
- if (!ignoreUnrecognizedFlags) { |
- print$(("unrecognized flag: \"" + arg + "\"")); |
- } |
- } |
+ this.disableBoundsChecks = true; |
+ return true; |
- } |
- } |
- if (!passedLibDir && $eq$(this.config, "dev") && !files.fileExists(this.libDir)) { |
- var temp = "frog/lib"; |
- if (files.fileExists(temp)) { |
- this.libDir = temp; |
- } |
- else { |
- this.libDir = "lib"; |
- } |
} |
+ return false; |
} |
// ********** Code for LibraryReader ************** |
function LibraryReader() { |
@@ -14536,7 +14542,7 @@ function LibraryReader() { |
this._specialLibs = _map(["dart:core", joinPaths($globals.options.libDir, "corelib.dart"), "dart:coreimpl", joinPaths($globals.options.libDir, "corelib_impl.dart"), "dart:html", joinPaths($globals.options.libDir, "../../client/html/frog/html_frog.dart"), "dart:dom", joinPaths($globals.options.libDir, "../../client/dom/frog/dom_frog.dart"), "dart:json", joinPaths($globals.options.libDir, "../../lib/json/json_frog.dart"), "dart:isolate", joinPaths($globals.options.libDir, "../../lib/isolate/isolate_frog.dart")]); |
} |
else if ($eq$($globals.options.config, "sdk")) { |
- this._specialLibs = _map(["dart:core", joinPaths($globals.options.libDir, "core/core_frog.dart"), "dart:coreimpl", joinPaths($globals.options.libDir, "coreimpl/coreimpl_frog.dart"), "dart:html", joinPaths($globals.options.libDir, "html/frog/html_frog.dart"), "dart:dom", joinPaths($globals.options.libDir, "dom/dom_frog.dart"), "dart:json", joinPaths($globals.options.libDir, "json/json_frog.dart"), "dart:isolate", joinPaths($globals.options.libDir, "isolate/isolate_frog.dart")]); |
+ this._specialLibs = _map(["dart:core", joinPaths($globals.options.libDir, "core/core_frog.dart"), "dart:coreimpl", joinPaths($globals.options.libDir, "coreimpl/coreimpl_frog.dart"), "dart:html", joinPaths($globals.options.libDir, "html/html_frog.dart"), "dart:dom", joinPaths($globals.options.libDir, "dom/dom_frog.dart"), "dart:json", joinPaths($globals.options.libDir, "json/json_frog.dart"), "dart:isolate", joinPaths($globals.options.libDir, "isolate/isolate_frog.dart")]); |
} |
else { |
$globals.world.error(("Invalid configuration " + $globals.options.config)); |