123456789101112131415161718192021222324252627282930313233343536373839404142 |
- //
- // XCTLExportStatement.swift
- // notebook
- //
- // Created by 邢铖 on 2023/5/18.
- //
- import Foundation
- internal class XCTLExportStatement: XCTLStatement {
-
- var type: XCTLStatementType { .typeExport }
-
- var holdingObject: XCTLRuntimeVariable { .void }
-
- var variableName: String = ""
-
- weak var parent: XCTLStatement?
-
- func matchSelfStatement(lex: XCTLLexer) throws -> XCTLStatement? {
- return try lex.peek().type == .typeExport ? XCTLExportStatement() : nil
- }
-
- func parseStatement(fromLexerToSelf lex: XCTLLexer, fromParent: XCTLStatement?) throws {
- self.parent = fromParent
- try lex.next()
- let variableNameToken = try lex.next()
- if variableNameToken.type != .typeIdentifier {
- throw XCTLCompileTimeError.unexpectTokenInStatement(expect: XCTLTokenType.typeIdentifier.rawValue, butGot: variableNameToken.type.rawValue)
- }
- self.variableName = variableNameToken.rawValue
-
- lex.lastStatement = self
- }
-
- func evaluate(inContext context: XCTLRuntimeAbstractContext) throws -> XCTLRuntimeVariable {
- context.addExport(name: self.variableName)
- return .void
- }
-
- }
|