XCTLExportStatement.swift 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. //
  2. // XCTLExportStatement.swift
  3. // notebook
  4. //
  5. // Created by 邢铖 on 2023/5/18.
  6. //
  7. import Foundation
  8. internal class XCTLExportStatement: XCTLStatement {
  9. var type: XCTLStatementType { .typeExport }
  10. var holdingObject: XCTLRuntimeVariable { .void }
  11. var variableName: String = ""
  12. weak var parent: XCTLStatement?
  13. func matchSelfStatement(lex: XCTLLexer) throws -> XCTLStatement? {
  14. return try lex.peek().type == .typeExport ? XCTLExportStatement() : nil
  15. }
  16. func parseStatement(fromLexerToSelf lex: XCTLLexer, fromParent: XCTLStatement?) throws {
  17. self.parent = fromParent
  18. try lex.next()
  19. let variableNameToken = try lex.next()
  20. if variableNameToken.type != .typeIdentifier {
  21. throw XCTLCompileTimeError.unexpectTokenInStatement(expect: XCTLTokenType.typeIdentifier.rawValue, butGot: variableNameToken.type.rawValue)
  22. }
  23. self.variableName = variableNameToken.rawValue
  24. lex.lastStatement = self
  25. }
  26. func evaluate(inContext context: XCTLRuntimeAbstractContext) throws -> XCTLRuntimeVariable {
  27. context.addExport(name: self.variableName)
  28. return .void
  29. }
  30. }