]> git.saurik.com Git - cycript.git/commitdiff
Simplify CYScope's declaration by embracing Close.
authorJay Freeman (saurik) <saurik@saurik.com>
Sat, 21 Nov 2015 09:32:33 +0000 (01:32 -0800)
committerJay Freeman (saurik) <saurik@saurik.com>
Sat, 21 Nov 2015 09:32:33 +0000 (01:32 -0800)
Parser.hpp
Replace.cpp

index de8d5a5c0156f43dd5b7556ddea9e4aa4557ce08..e02a16610eafe199d14c5480baffe5f99230be40 100644 (file)
@@ -313,24 +313,17 @@ typedef std::vector<CYIdentifierUsage> CYIdentifierUsageVector;
 
 struct CYScope {
     bool transparent_;
-
-    CYContext &context_;
-    CYStatement *&statements_;
-
     CYScope *parent_;
 
     CYIdentifierAddressFlagsMap internal_;
     CYIdentifierValueSet identifiers_;
 
-    CYScope(bool transparent, CYContext &context, CYStatement *&statements);
-    virtual ~CYScope();
-
-    void Close();
+    CYScope(bool transparent, CYContext &context);
 
     void Declare(CYContext &context, CYIdentifier *identifier, CYIdentifierFlags flags);
     virtual CYIdentifier *Lookup(CYContext &context, CYIdentifier *identifier);
     void Merge(CYContext &context, CYIdentifier *identifier);
-    void Scope(CYContext &context, CYStatement *&statements);
+    void Close(CYContext &context, CYStatement *&statements);
 };
 
 struct CYProgram :
index bcaffca8cd39ad9e3376c3ff0c43a3907ea55e7c..0f53d926a37e828f5aff1e5d74de94a4e1dc1845 100644 (file)
@@ -124,13 +124,13 @@ namespace cy {
 namespace Syntax {
 
 void Catch::Replace(CYContext &context) { $T()
-    CYScope scope(true, context, code_.statements_);
+    CYScope scope(true, context);
 
     context.Replace(name_);
     context.scope_->Declare(context, name_, CYIdentifierCatch);
 
     code_.Replace(context);
-    scope.Close();
+    scope.Close(context, code_.statements_);
 }
 
 } }
@@ -468,7 +468,7 @@ void CYFunction::Replace_(CYContext &context, bool outer) {
         context.nextlocal_ = nonlocal_;
     }
 
-    CYScope scope(!localize, context, code_.statements_);
+    CYScope scope(!localize, context);
 
     if (!outer && name_ != NULL)
         Inject(context);
@@ -489,7 +489,7 @@ void CYFunction::Replace_(CYContext &context, bool outer) {
 
     context.this_ = _this;
 
-    scope.Close();
+    scope.Close(context, code_.statements_);
 }
 
 CYExpression *CYFunctionExpression::Replace(CYContext &context) {
@@ -651,13 +651,13 @@ namespace {
 }
 
 void CYProgram::Replace(CYContext &context) {
-    CYScope scope(true, context, statements_);
+    CYScope scope(true, context);
 
     context.nextlocal_ = $ CYNonLocal();
     context.ReplaceAll(statements_);
     context.NonLocal(statements_);
 
-    scope.Close();
+    scope.Close(context, statements_);
 
     size_t offset(0);
 
@@ -734,21 +734,11 @@ CYExpression *CYRubyProc::Replace(CYContext &context) {
     return CYNonLocalize(context, $ CYFunctionExpression(NULL, parameters_, code_));
 }
 
-CYScope::CYScope(bool transparent, CYContext &context, CYStatement *&statements) :
+CYScope::CYScope(bool transparent, CYContext &context) :
     transparent_(transparent),
-    context_(context),
-    statements_(statements),
     parent_(context.scope_)
 {
-    context_.scope_ = this;
-}
-
-CYScope::~CYScope() {
-}
-
-void CYScope::Close() {
-    context_.scope_ = parent_;
-    Scope(context_, statements_);
+    context.scope_ = this;
 }
 
 void CYScope::Declare(CYContext &context, CYIdentifier *identifier, CYIdentifierFlags flags) {
@@ -806,7 +796,9 @@ namespace {
     typedef std::set<IdentifierOffset, IdentifierOffsetLess> IdentifierOffsets;
 }
 
-void CYScope::Scope(CYContext &context, CYStatement *&statements) {
+void CYScope::Close(CYContext &context, CYStatement *&statements) {
+    context.scope_ = parent_;
+
     if (parent_ == NULL)
         return;