Browse Source

Classify objc's property with no-arg function

xcbosa mbp16 2 years ago
parent
commit
349b292a19

+ 26 - 132
XCTreeLang.xcodeproj/xcuserdata/xcbosa.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

@@ -788,22 +788,6 @@
             </Locations>
          </BreakpointContent>
       </BreakpointProxy>
-      <BreakpointProxy
-         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
-         <BreakpointContent
-            uuid = "83F6BEAD-F186-4CC5-873F-E006BE479EBB"
-            shouldBeEnabled = "Yes"
-            ignoreCount = "0"
-            continueAfterRunningActions = "No"
-            filePath = "XCTreeLang/Statements/XCTLVariableRefStatement.swift"
-            startingColumnNumber = "9223372036854775807"
-            endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "60"
-            endingLineNumber = "60"
-            landmarkName = "evaluate(inContext:)"
-            landmarkType = "7">
-         </BreakpointContent>
-      </BreakpointProxy>
       <BreakpointProxy
          BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
          <BreakpointContent
@@ -814,28 +798,28 @@
             filePath = "XCTreeLang/Statements/XCTLVariableRefStatement.swift"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "125"
-            endingLineNumber = "125"
+            startingLineNumber = "124"
+            endingLineNumber = "124"
             landmarkName = "evaluateBack(_:inContext:)"
             landmarkType = "7">
             <Locations>
                <Location
-                  uuid = "C3B0488E-C243-48F8-A91B-52C5156798CE - b2953dc3cfc33c98"
+                  uuid = "C3B0488E-C243-48F8-A91B-52C5156798CE - 819511eaf925e82a"
                   shouldBeEnabled = "Yes"
                   ignoreCount = "0"
                   continueAfterRunningActions = "No"
-                  symbolName = "XCTreeLang.XCTLVariableRefStatement.evaluateBack(_: XCTreeLang.XCTLRuntimeVariable, inContext: XCTreeLang.XCTLRuntimeAbstractContext) throws -&gt; XCTreeLang.XCTLRuntimeVariable"
+                  symbolName = "XCTreeLang.XCTLVariableRefStatement.evaluate(inContext: XCTreeLang.XCTLRuntimeAbstractContext) throws -&gt; XCTreeLang.XCTLRuntimeVariable"
                   moduleName = "XCTreeLang"
                   usesParentBreakpointCondition = "Yes"
                   urlString = "file:///Users/xcbosa/Documents/LibraryProjects/XCTreeLang/XCTreeLang/Statements/XCTLVariableRefStatement.swift"
                   startingColumnNumber = "9223372036854775807"
                   endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "119"
-                  endingLineNumber = "119"
-                  offsetFromSymbolStart = "696">
+                  startingLineNumber = "102"
+                  endingLineNumber = "102"
+                  offsetFromSymbolStart = "2100">
                </Location>
                <Location
-                  uuid = "C3B0488E-C243-48F8-A91B-52C5156798CE - b2953dc3cfc33c98"
+                  uuid = "C3B0488E-C243-48F8-A91B-52C5156798CE - b2953dc3cfc33d7f"
                   shouldBeEnabled = "Yes"
                   ignoreCount = "0"
                   continueAfterRunningActions = "No"
@@ -845,38 +829,8 @@
                   urlString = "file:///Users/xcbosa/Documents/LibraryProjects/XCTreeLang/XCTreeLang/Statements/XCTLVariableRefStatement.swift"
                   startingColumnNumber = "9223372036854775807"
                   endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "119"
-                  endingLineNumber = "119"
-                  offsetFromSymbolStart = "820">
-               </Location>
-               <Location
-                  uuid = "C3B0488E-C243-48F8-A91B-52C5156798CE - b2953dc3cfc33d1c"
-                  shouldBeEnabled = "Yes"
-                  ignoreCount = "0"
-                  continueAfterRunningActions = "No"
-                  symbolName = "XCTreeLang.XCTLVariableRefStatement.evaluateBack(_: XCTreeLang.XCTLRuntimeVariable, inContext: XCTreeLang.XCTLRuntimeAbstractContext) throws -&gt; XCTreeLang.XCTLRuntimeVariable"
-                  moduleName = "XCTreeLang"
-                  usesParentBreakpointCondition = "Yes"
-                  urlString = "file:///Users/xcbosa/Documents/LibraryProjects/XCTreeLang/XCTreeLang/Statements/XCTLVariableRefStatement.swift"
-                  startingColumnNumber = "9223372036854775807"
-                  endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "123"
-                  endingLineNumber = "123"
-                  offsetFromSymbolStart = "820">
-               </Location>
-               <Location
-                  uuid = "C3B0488E-C243-48F8-A91B-52C5156798CE - b2953dc3cfc33d5e"
-                  shouldBeEnabled = "Yes"
-                  ignoreCount = "0"
-                  continueAfterRunningActions = "No"
-                  symbolName = "XCTreeLang.XCTLVariableRefStatement.evaluateBack(_: XCTreeLang.XCTLRuntimeVariable, inContext: XCTreeLang.XCTLRuntimeAbstractContext) throws -&gt; XCTreeLang.XCTLRuntimeVariable"
-                  moduleName = "XCTreeLang"
-                  usesParentBreakpointCondition = "Yes"
-                  urlString = "file:///Users/xcbosa/Documents/LibraryProjects/XCTreeLang/XCTreeLang/Statements/XCTLVariableRefStatement.swift"
-                  startingColumnNumber = "9223372036854775807"
-                  endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "125"
-                  endingLineNumber = "125"
+                  startingLineNumber = "124"
+                  endingLineNumber = "124"
                   offsetFromSymbolStart = "820">
                </Location>
             </Locations>
@@ -892,13 +846,13 @@
             filePath = "XCTreeLang/Statements/XCTLVariableRefStatement.swift"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "139"
-            endingLineNumber = "139"
+            startingLineNumber = "138"
+            endingLineNumber = "138"
             landmarkName = "evaluateBack(_:inContext:)"
             landmarkType = "7">
             <Locations>
                <Location
-                  uuid = "C0E92D41-309C-419D-BDAE-E705374FB334 - b2953dc3cfc33a56"
+                  uuid = "C0E92D41-309C-419D-BDAE-E705374FB334 - b2953dc3cfc33b2d"
                   shouldBeEnabled = "Yes"
                   ignoreCount = "0"
                   continueAfterRunningActions = "No"
@@ -908,42 +862,12 @@
                   urlString = "file:///Users/xcbosa/Documents/LibraryProjects/XCTreeLang/XCTreeLang/Statements/XCTLVariableRefStatement.swift"
                   startingColumnNumber = "9223372036854775807"
                   endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "133"
-                  endingLineNumber = "133"
+                  startingLineNumber = "138"
+                  endingLineNumber = "138"
                   offsetFromSymbolStart = "1716">
                </Location>
                <Location
-                  uuid = "C0E92D41-309C-419D-BDAE-E705374FB334 - b2953dc3cfc33a56"
-                  shouldBeEnabled = "Yes"
-                  ignoreCount = "0"
-                  continueAfterRunningActions = "No"
-                  symbolName = "XCTreeLang.XCTLVariableRefStatement.evaluateBack(_: XCTreeLang.XCTLRuntimeVariable, inContext: XCTreeLang.XCTLRuntimeAbstractContext) throws -&gt; XCTreeLang.XCTLRuntimeVariable"
-                  moduleName = "XCTreeLang"
-                  usesParentBreakpointCondition = "Yes"
-                  urlString = "file:///Users/xcbosa/Documents/LibraryProjects/XCTreeLang/XCTreeLang/Statements/XCTLVariableRefStatement.swift"
-                  startingColumnNumber = "9223372036854775807"
-                  endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "133"
-                  endingLineNumber = "133"
-                  offsetFromSymbolStart = "1800">
-               </Location>
-               <Location
-                  uuid = "C0E92D41-309C-419D-BDAE-E705374FB334 - b2953dc3cfc33aca"
-                  shouldBeEnabled = "Yes"
-                  ignoreCount = "0"
-                  continueAfterRunningActions = "No"
-                  symbolName = "XCTreeLang.XCTLVariableRefStatement.evaluateBack(_: XCTreeLang.XCTLRuntimeVariable, inContext: XCTreeLang.XCTLRuntimeAbstractContext) throws -&gt; XCTreeLang.XCTLRuntimeVariable"
-                  moduleName = "XCTreeLang"
-                  usesParentBreakpointCondition = "Yes"
-                  urlString = "file:///Users/xcbosa/Documents/LibraryProjects/XCTreeLang/XCTreeLang/Statements/XCTLVariableRefStatement.swift"
-                  startingColumnNumber = "9223372036854775807"
-                  endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "137"
-                  endingLineNumber = "137"
-                  offsetFromSymbolStart = "1800">
-               </Location>
-               <Location
-                  uuid = "C0E92D41-309C-419D-BDAE-E705374FB334 - b2953dc3cfc33b0c"
+                  uuid = "C0E92D41-309C-419D-BDAE-E705374FB334 - b2953dc3cfc33b2d"
                   shouldBeEnabled = "Yes"
                   ignoreCount = "0"
                   continueAfterRunningActions = "No"
@@ -953,8 +877,8 @@
                   urlString = "file:///Users/xcbosa/Documents/LibraryProjects/XCTreeLang/XCTreeLang/Statements/XCTLVariableRefStatement.swift"
                   startingColumnNumber = "9223372036854775807"
                   endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "139"
-                  endingLineNumber = "139"
+                  startingLineNumber = "138"
+                  endingLineNumber = "138"
                   offsetFromSymbolStart = "1800">
                </Location>
             </Locations>
@@ -970,13 +894,13 @@
             filePath = "XCTreeLang/Statements/XCTLVariableRefStatement.swift"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "142"
-            endingLineNumber = "142"
+            startingLineNumber = "141"
+            endingLineNumber = "141"
             landmarkName = "evaluateBack(_:inContext:)"
             landmarkType = "7">
             <Locations>
                <Location
-                  uuid = "13C4A8A4-B94A-43B8-8601-88F10E7EAC2A - b2953dc3cfc33aeb"
+                  uuid = "13C4A8A4-B94A-43B8-8601-88F10E7EAC2A - b2953dc3cfc33b4e"
                   shouldBeEnabled = "Yes"
                   ignoreCount = "0"
                   continueAfterRunningActions = "No"
@@ -986,42 +910,12 @@
                   urlString = "file:///Users/xcbosa/Documents/LibraryProjects/XCTreeLang/XCTreeLang/Statements/XCTLVariableRefStatement.swift"
                   startingColumnNumber = "9223372036854775807"
                   endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "136"
-                  endingLineNumber = "136"
+                  startingLineNumber = "141"
+                  endingLineNumber = "141"
                   offsetFromSymbolStart = "2020">
                </Location>
                <Location
-                  uuid = "13C4A8A4-B94A-43B8-8601-88F10E7EAC2A - b2953dc3cfc33aeb"
-                  shouldBeEnabled = "Yes"
-                  ignoreCount = "0"
-                  continueAfterRunningActions = "No"
-                  symbolName = "XCTreeLang.XCTLVariableRefStatement.evaluateBack(_: XCTreeLang.XCTLRuntimeVariable, inContext: XCTreeLang.XCTLRuntimeAbstractContext) throws -&gt; XCTreeLang.XCTLRuntimeVariable"
-                  moduleName = "XCTreeLang"
-                  usesParentBreakpointCondition = "Yes"
-                  urlString = "file:///Users/xcbosa/Documents/LibraryProjects/XCTreeLang/XCTreeLang/Statements/XCTLVariableRefStatement.swift"
-                  startingColumnNumber = "9223372036854775807"
-                  endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "136"
-                  endingLineNumber = "136"
-                  offsetFromSymbolStart = "2396">
-               </Location>
-               <Location
-                  uuid = "13C4A8A4-B94A-43B8-8601-88F10E7EAC2A - b2953dc3cfc33b6f"
-                  shouldBeEnabled = "Yes"
-                  ignoreCount = "0"
-                  continueAfterRunningActions = "No"
-                  symbolName = "XCTreeLang.XCTLVariableRefStatement.evaluateBack(_: XCTreeLang.XCTLRuntimeVariable, inContext: XCTreeLang.XCTLRuntimeAbstractContext) throws -&gt; XCTreeLang.XCTLRuntimeVariable"
-                  moduleName = "XCTreeLang"
-                  usesParentBreakpointCondition = "Yes"
-                  urlString = "file:///Users/xcbosa/Documents/LibraryProjects/XCTreeLang/XCTreeLang/Statements/XCTLVariableRefStatement.swift"
-                  startingColumnNumber = "9223372036854775807"
-                  endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "140"
-                  endingLineNumber = "140"
-                  offsetFromSymbolStart = "2396">
-               </Location>
-               <Location
-                  uuid = "13C4A8A4-B94A-43B8-8601-88F10E7EAC2A - b2953dc3cfc33ba1"
+                  uuid = "13C4A8A4-B94A-43B8-8601-88F10E7EAC2A - b2953dc3cfc33b4e"
                   shouldBeEnabled = "Yes"
                   ignoreCount = "0"
                   continueAfterRunningActions = "No"
@@ -1031,8 +925,8 @@
                   urlString = "file:///Users/xcbosa/Documents/LibraryProjects/XCTreeLang/XCTreeLang/Statements/XCTLVariableRefStatement.swift"
                   startingColumnNumber = "9223372036854775807"
                   endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "142"
-                  endingLineNumber = "142"
+                  startingLineNumber = "141"
+                  endingLineNumber = "141"
                   offsetFromSymbolStart = "2396">
                </Location>
             </Locations>

+ 4 - 0
XCTreeLang/Lex/XCTLLexer.swift

@@ -76,6 +76,10 @@ internal class XCTLLexer {
                 return XCTLToken(type: .typeEqualthan, rawValue: buffer)
             case "paragraph":
                 return XCTLToken(type: .typeParagraph, rawValue: buffer)
+            case "function":
+                return XCTLToken(type: .typeParagraph, rawValue: buffer)
+            case "func":
+                return XCTLToken(type: .typeParagraph, rawValue: buffer)
             case "set":
                 return XCTLToken(type: .typeSet, rawValue: buffer)
             case "else":

+ 2 - 1
XCTreeLang/Statements/XCTLFunctionCallStatement.swift

@@ -84,7 +84,8 @@ internal class XCTLFunctionCallStatement: XCTLStatement, XCTLExpressionPart {
                 return result
             }
             if funcValue.type != .typeFuncIntrinsic {
-                throw XCTLRuntimeError.unexpectedVariableType(expect: XCTLRuntimeVariableType.typeFuncIntrinsic.rawValue, butGot: funcValue.type.rawValue)
+                context.variableStack.pushVariable(funcValue)
+                return funcValue
             }
             let result = try funcValue.executeFunc(arg: arg)
             context.variableStack.pushVariable(result)

+ 24 - 25
XCTreeLang/Statements/XCTLVariableRefStatement.swift

@@ -61,36 +61,35 @@ internal class XCTLVariableRefStatement: XCTLStatement, XCTLBackableStatement, X
             }
             let rawObject = currentValue.objectValue
             
-            if nextStmt.nextVariableRefStmt == nil {
-                let selector = NSSelectorFromString(memberName)
-                if rawObject.responds(to: selector) {
-                    let funcIntrinsicVariable = XCTLRuntimeVariable { args in
-                        let invocation = try Invocation(target: rawObject, selector: selector)
-                        for index in 0..<invocation.numberOfArguments - 2 {
-                            let arg = args[index]
-                            if arg.type == .typeNumber {
-                                invocation.setArgument(arg.doubleValue, at: index + 2)
-                            } else {
-                                invocation.setArgument(arg.nativeValue, at: index + 2)
-                            }
-                        }
-                        invocation.invoke()
-                        if invocation.returnsObject,
-                           let object = invocation.returnedObject as? NSObject {
-                            return XCTLRuntimeVariable(rawObject: object)
-                        }
-                        return .void
-                    }
-                    context.variableStack.pushVariable(funcIntrinsicVariable)
-                    return funcIntrinsicVariable
-                }
-            }
-            
             var obj: Any?
             let exception = ocTryCatch {
                 obj = rawObject.value(forKey: memberName)
             }
             if exception != nil {
+                if nextStmt.nextVariableRefStmt == nil {
+                    let selector = NSSelectorFromString(memberName)
+                    if rawObject.responds(to: selector) {
+                        let funcIntrinsicVariable = XCTLRuntimeVariable { args in
+                            let invocation = try Invocation(target: rawObject, selector: selector)
+                            for index in 0..<invocation.numberOfArguments - 2 {
+                                let arg = args[index]
+                                if arg.type == .typeNumber {
+                                    invocation.setArgument(arg.doubleValue, at: index + 2)
+                                } else {
+                                    invocation.setArgument(arg.nativeValue, at: index + 2)
+                                }
+                            }
+                            invocation.invoke()
+                            if invocation.returnsObject,
+                               let object = invocation.returnedObject as? NSObject {
+                                return XCTLRuntimeVariable(rawObject: object)
+                            }
+                            return .void
+                        }
+                        context.variableStack.pushVariable(funcIntrinsicVariable)
+                        return funcIntrinsicVariable
+                    }
+                }
                 throw XCTLRuntimeError.unknownMemberForVariable(memberName: memberName, variableName: refName)
             }
             guard let obj = obj as? NSObject else {