Bladeren bron

All export apply when finish executing

xcbosa-itx 2 jaren geleden
bovenliggende
commit
9a540da100

BIN
.DS_Store


BIN
XCTreeLang.xcodeproj/project.xcworkspace/xcuserdata/xcbosa.xcuserdatad/UserInterfaceState.xcuserstate


+ 11 - 3
XCTreeLang/Runtime/XCTLRuntimeContext.swift

@@ -12,6 +12,8 @@ internal class XCTLRuntimeContext: XCTLRuntimeAbstractContext {
     
     
     public let nativeObjectInstance: NSObject
     public let nativeObjectInstance: NSObject
     
     
+    public var nativeObjectMutations = [(String, XCTLRuntimeVariable)]()
+    
     private let generators: [String : XCTLGenerateProtocol.Type]
     private let generators: [String : XCTLGenerateProtocol.Type]
     
     
     private var values = [String : XCTLRuntimeVariable]()
     private var values = [String : XCTLRuntimeVariable]()
@@ -184,21 +186,27 @@ internal class XCTLRuntimeContext: XCTLRuntimeAbstractContext {
         for name in names {
         for name in names {
             self.values[name] = value
             self.values[name] = value
             if exportNames.contains(name) {
             if exportNames.contains(name) {
-                self.nativeObjectInstance.setValue(value.nativeValue, forKey: name)
+                self.nativeObjectMutations.append((name, value))
             }
             }
         }
         }
     }
     }
     
     
     internal func setValueToRootAssumeExport(_ value: XCTLRuntimeVariable, forName name: String) {
     internal func setValueToRootAssumeExport(_ value: XCTLRuntimeVariable, forName name: String) {
         self.values[name] = value
         self.values[name] = value
-        self.nativeObjectInstance.setValue(value.nativeValue, forKey: name)
+        self.nativeObjectMutations.append((name, value))
     }
     }
     
     
     internal func setValueToRoot(_ value: XCTLRuntimeVariable, forName name: String, assumeExport export: Bool) {
     internal func setValueToRoot(_ value: XCTLRuntimeVariable, forName name: String, assumeExport export: Bool) {
         self.values[name] = value
         self.values[name] = value
         let doExport = export || self.exportNames.contains(name)
         let doExport = export || self.exportNames.contains(name)
         if doExport {
         if doExport {
-            self.nativeObjectInstance.setValue(value.nativeValue, forKey: name)
+            self.nativeObjectMutations.append((name, value))
+        }
+    }
+    
+    internal func applyNativeObjectMutations() {
+        for it in self.nativeObjectMutations {
+            self.nativeObjectInstance.setValue(it.1, forKey: it.0)
         }
         }
     }
     }
     
     

+ 1 - 0
XCTreeLang/XCTLEngine.swift

@@ -124,6 +124,7 @@ public class XCTLEngine: NSObject {
                 _ = try stmt.evaluate(inContext: context)
                 _ = try stmt.evaluate(inContext: context)
             }
             }
         }
         }
+        context.applyNativeObjectMutations()
     }
     }
     
     
     public func enableAutoEvaluateForViewController() {
     public func enableAutoEvaluateForViewController() {