diff --git a/pkgs/yaml/lib/composer.dart b/pkgs/yaml/lib/composer.dart
index e9c1879..e22159f 100644
--- a/pkgs/yaml/lib/composer.dart
+++ b/pkgs/yaml/lib/composer.dart
@@ -120,12 +120,7 @@
 
     match = new RegExp("^0o([0-7]+)\$").firstMatch(content);
     if (match != null) {
-      // TODO(nweiz): clean this up when Dart can parse an octal string
-      var n = 0;
-      for (var c in match.group(1).charCodes) {
-        n *= 8;
-        n += c - 48;
-      }
+      int n = int.parse(match.group(1), radix: 8);
       return new _ScalarNode(_Tag.yaml("int"), value: n);
     }
 
@@ -153,15 +148,13 @@
 
     match = new RegExp("^([+-]?)\.(inf|Inf|INF)\$").firstMatch(content);
     if (match != null) {
-      var infinityStr = match.group(1) == "-" ? "-Infinity" : "Infinity";
-      return new _ScalarNode(_Tag.yaml("float"),
-          value: double.parse(infinityStr));
+      var value = match.group(1) == "-" ? -double.INFINITY : double.INFINITY;
+      return new _ScalarNode(_Tag.yaml("float"), value: value);
     }
 
     match = new RegExp("^\.(nan|NaN|NAN)\$").firstMatch(content);
     if (match != null) {
-      return new _ScalarNode(_Tag.yaml("float"),
-          value: double.parse("NaN"));
+      return new _ScalarNode(_Tag.yaml("float"), value: double.NAN);
     }
 
     return null;
diff --git a/pkgs/yaml/lib/model.dart b/pkgs/yaml/lib/model.dart
index 9f1474e..5c09aa5 100644
--- a/pkgs/yaml/lib/model.dart
+++ b/pkgs/yaml/lib/model.dart
@@ -149,7 +149,7 @@
       // TODO(nweiz): This could be faster if we used a RegExp to check for
       // special characters and short-circuited if they didn't exist.
 
-      var escapedValue = value.charCodes.map((c) {
+      var escapedValue = value.codeUnits.map((c) {
         switch (c) {
         case _Parser.TAB: return "\\t";
         case _Parser.LF: return "\\n";
diff --git a/pkgs/yaml/lib/parser.dart b/pkgs/yaml/lib/parser.dart
index f2f255e..386bb59 100644
--- a/pkgs/yaml/lib/parser.dart
+++ b/pkgs/yaml/lib/parser.dart
@@ -172,7 +172,7 @@
   /// forward one character. Also updates the current line and column numbers.
   int next() {
     if (pos == len) return -1;
-    var char = s.charCodeAt(pos++);
+    var char = s.codeUnitAt(pos++);
     if (isBreak(char)) {
       line++;
       column = 0;
@@ -193,14 +193,14 @@
     return char;
   }
 
-  /// Returns the character at the current position, or the character [i]
+  /// Returns the code unit at the current position, or the character [i]
   /// characters after the current position.
   ///
   /// Returns -1 if this would return a character after the end or before the
   /// beginning of the input string.
   int peek([int i = 0]) {
     var peekPos = pos + i;
-    return (peekPos >= len || peekPos < 0) ? -1 : s.charCodeAt(peekPos);
+    return (peekPos >= len || peekPos < 0) ? -1 : s.codeUnitAt(peekPos);
   }
 
   /// The truthiness operator. Returns `false` if [obj] is `null` or `false`,
@@ -304,7 +304,7 @@
   ///
   /// Returns whether or not the string was consumed.
   bool rawString(String str) =>
-    nAtOnce(str.length, (c, i) => str.charCodeAt(i) == c);
+    nAtOnce(str.length, (c, i) => str.codeUnitAt(i) == c);
 
   /// Consumes and returns a string of characters matching [matcher], or null if
   /// there are no such characters.
