| Index: src/sksl/SkSLUtil.cpp | 
| diff --git a/src/sksl/SkSLUtil.cpp b/src/sksl/SkSLUtil.cpp | 
| index 327bffe4f1910c778d9a9654b304c5434d98f312..51ad9fe808791bbe545cd9870db3305d1f4b5600 100644 | 
| --- a/src/sksl/SkSLUtil.cpp | 
| +++ b/src/sksl/SkSLUtil.cpp | 
| @@ -9,7 +9,48 @@ | 
|  | 
| namespace SkSL { | 
|  | 
| +std::string to_string(double value) { | 
| +    std::stringstream buffer; | 
| +    buffer << std::setprecision(std::numeric_limits<double>::digits10) << value; | 
| +    std::string result = buffer.str(); | 
| +    if (result.find_last_of(".") == std::string::npos && | 
| +        result.find_last_of("e") == std::string::npos) { | 
| +        result += ".0"; | 
| +    } | 
| +    return result; | 
| +} | 
| + | 
| +std::string to_string(int32_t value) { | 
| +    std::stringstream buffer; | 
| +    buffer << value; | 
| +    return buffer.str(); | 
| +} | 
| + | 
| +std::string to_string(uint32_t value) { | 
| +    std::stringstream buffer; | 
| +    buffer << value; | 
| +    return buffer.str(); | 
| +} | 
| + | 
| +std::string to_string(int64_t value) { | 
| +    std::stringstream buffer; | 
| +    buffer << value; | 
| +    return buffer.str(); | 
| +} | 
| + | 
| +std::string to_string(uint64_t value) { | 
| +    std::stringstream buffer; | 
| +    buffer << value; | 
| +    return buffer.str(); | 
| +} | 
| + | 
| int stoi(std::string s) { | 
| +    if (s.size() > 2 && s[0] == '0' && s[1] == 'x') { | 
| +        char* p; | 
| +        int result = strtoul(s.substr(2).c_str(), &p, 16); | 
| +        ASSERT(*p == 0); | 
| +        return result; | 
| +    } | 
| return atoi(s.c_str()); | 
| } | 
|  | 
| @@ -18,6 +59,12 @@ double stod(std::string s) { | 
| } | 
|  | 
| long stol(std::string s) { | 
| +    if (s.size() > 2 && s[0] == '0' && s[1] == 'x') { | 
| +        char* p; | 
| +        long result = strtoul(s.substr(2).c_str(), &p, 16); | 
| +        ASSERT(*p == 0); | 
| +        return result; | 
| +    } | 
| return atol(s.c_str()); | 
| } | 
|  | 
|  |