]> git.saurik.com Git - cycript.git/commitdiff
CYPoolCode should simply take an std::istream &.
authorJay Freeman (saurik) <saurik@saurik.com>
Sun, 26 Jan 2014 21:53:26 +0000 (13:53 -0800)
committerJay Freeman (saurik) <saurik@saurik.com>
Sun, 26 Jan 2014 21:53:26 +0000 (13:53 -0800)
Code.hpp [new file with mode: 0644]
Execute.cpp
Highlight.cpp
Library.cpp
ObjectiveC/Library.mm
Parser.hpp
cycript.hpp

diff --git a/Code.hpp b/Code.hpp
new file mode 100644 (file)
index 0000000..324c00f
--- /dev/null
+++ b/Code.hpp
@@ -0,0 +1,52 @@
+/* Cycript - Optimizing JavaScript Compiler/Runtime
+ * Copyright (C) 2009-2013  Jay Freeman (saurik)
+*/
+
+/* GNU General Public License, Version 3 {{{ */
+/*
+ * Cycript 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 3 of the License,
+ * or (at your option) any later version.
+ *
+ * Cycript 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 Cycript.  If not, see <http://www.gnu.org/licenses/>.
+**/
+/* }}} */
+
+#ifndef CODE_HPP
+#define CODE_HPP
+
+#include <iostream>
+
+#include "String.hpp"
+
+class CYStream :
+    public std::istream
+{
+  private:
+    class CYBuffer :
+        public std::streambuf
+    {
+      public:
+        CYBuffer(const char *start, const char *end) {
+            setg(const_cast<char *>(start), const_cast<char *>(start), const_cast<char *>(end));
+        }
+    } buffer_;
+
+  public:
+    CYStream(const char *start, const char *end) :
+        std::istream(&buffer_),
+        buffer_(start, end)
+    {
+    }
+};
+
+CYUTF8String CYPoolCode(CYPool &pool, std::istream &stream);
+
+#endif//CODE_HPP
index 1644bb1d5ae2bfb42873669b8d5a315462601e8f..82ef815325ea7b3d8883fefd6de3221eb578f6ca 100644 (file)
@@ -44,8 +44,7 @@
 #include <sstream>
 #include <cmath>
 
-#include "Parser.hpp"
-
+#include "Code.hpp"
 #include "Decode.hpp"
 #include "Error.hpp"
 #include "JavaScript.hpp"
@@ -1736,7 +1735,7 @@ static JSValueRef require(JSContextRef context, JSObjectRef object, JSObjectRef
 
         std::stringstream wrap;
         wrap << "(function (exports, require, module) { " << code << "\n});";
-        code = CYPoolCode(pool, wrap.str().c_str());
+        code = CYPoolCode(pool, wrap);
 
         JSValueRef value(_jsccall(JSEvaluateScript, context, CYJSString(code), NULL, NULL, 0));
         JSObjectRef function(CYCastJSObject(context, value));
index 4cfc8db26a60bc93d0bc5d08dd6bf9356eba7dad..7cb96ee84504a291113a50183ff5a570a9d756e1 100644 (file)
@@ -24,6 +24,7 @@
 
 #include "Cycript.tab.hh"
 #include "Driver.hpp"
+#include "Code.hpp"
 
 static void Skip(const char *data, size_t size, std::ostream &output, size_t &offset, cy::position &current, cy::position target) {
     while (current.line != target.line || current.column != target.column) {
index 74df5029d99e83216df8e0128f78a1c273bb37cb..816dab6cebb44a0d27d86eccec185797e45e1702 100644 (file)
@@ -191,9 +191,8 @@ double CYCastDouble(const char *value) {
     return CYCastDouble(value, strlen(value));
 }
 
-CYUTF8String CYPoolCode(CYPool &pool, CYUTF8String code) {
+CYUTF8String CYPoolCode(CYPool &pool, std::istream &stream) {
     CYLocalPool local;
-    CYStream stream(code.data, code.data + code.size);
     CYDriver driver(stream);
 
     cy::parser parser(driver);
index c4759a5a2c949c425f21e37370234027ba2d2916..fe8933cc417b5c92a57fc5a4d158ab28d2654158 100644 (file)
@@ -40,6 +40,7 @@
 #include <mach/mach.h>
 #endif
 
+#include "Code.hpp"
 #include "Error.hpp"
 #include "JavaScript.hpp"
 #include "String.hpp"
@@ -3116,7 +3117,8 @@ extern "C" void CydgetMemoryParse(const uint16_t **data, size_t *size) { try {
     CYPool pool;
 
     CYUTF8String utf8(CYPoolUTF8String(pool, CYUTF16String(*data, *size)));
-    utf8 = CYPoolCode(pool, utf8);
+    CYStream stream(utf8.data, utf8.data + utf8.size);
+    utf8 = CYPoolCode(pool, stream);
 
     CYUTF16String utf16(CYPoolUTF16String(pool, CYUTF8String(utf8.data, utf8.size)));
     size_t bytes(utf16.size * sizeof(uint16_t));
index e804e4aafd820836437a653cc75f2ce8683607c0..fab18af4d6c3f6d09ed7494a5683f10fe447de3b 100644 (file)
@@ -460,27 +460,6 @@ struct CYBlock :
     virtual void Output(CYOutput &out, CYFlags flags) const;
 };
 
-class CYStream :
-    public std::istream
-{
-  private:
-    class CYBuffer :
-        public std::streambuf
-    {
-      public:
-        CYBuffer(const char *start, const char *end) {
-            setg(const_cast<char *>(start), const_cast<char *>(start), const_cast<char *>(end));
-        }
-    } buffer_;
-
-  public:
-    CYStream(const char *start, const char *end) :
-        std::istream(&buffer_),
-        buffer_(start, end)
-    {
-    }
-};
-
 struct CYForInitialiser {
     virtual ~CYForInitialiser() {
     }
index e65721a32f5c682d3fb261cb914a1d93726c565e..d0fcaf65e5561af908affb25a938998d3f34789c 100644 (file)
@@ -26,7 +26,6 @@
 #include <sstream>
 
 #include "Pooling.hpp"
-#include "String.hpp"
 
 bool CYRecvAll_(int socket, uint8_t *data, size_t size);
 bool CYSendAll_(int socket, const uint8_t *data, size_t size);
@@ -51,6 +50,4 @@ bool CYSendAll(int socket, const Type_ *data, size_t size) {
 
 CYPool &CYGetGlobalPool();
 
-CYUTF8String CYPoolCode(CYPool &pool, CYUTF8String code);
-
 #endif/*CYCRIPT_HPP*/